inflearn logo
강의

Course

Instructor

[Beginner] Creating an Android Community App (Android Kotlin)

안드로이드 스튜디오 게시글 이미지 업로드 유무

212

fbwoduf11793

4 asked

0

게시글을 올릴때 이미지를 업로드 하지 않으면, 안드로이드 스튜디오가 꺼집니다. 혹시 이미지를 업로드 하지 않아도 게시글을 작성하려면 코드를 어떻게 수정해야하나요?

 

package com.example.healthcareapplication.fragments

import android.app.Activity.RESULT_OK
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.os.Bundle
import android.provider.MediaStore
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.navigation.fragment.findNavController
import com.example.healthcareapplication.DATA.ContentData
import com.example.healthcareapplication.DATA.ContentModel
import com.example.healthcareapplication.R
import com.example.healthcareapplication.databinding.FragmentCommunityWriteBinding
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.ktx.Firebase
import com.google.firebase.storage.ktx.storage
import java.io.ByteArrayOutputStream
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale

class CommunityWriteFragment : Fragment() {
    private lateinit var binding: FragmentCommunityWriteBinding
    private lateinit var auth: FirebaseAuth
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_community_write, container, false)
        val view = binding.root
        auth = FirebaseAuth.getInstance()


        binding.writeBtn.setOnClickListener {
            val title = binding.title.text.toString()
            val content = binding.content.text.toString()
            fetchContent(title, content)


            findNavController().navigate(R.id.action_communityWriteFragment_to_communityFragment)

        }

        binding.ImageBtn.setOnClickListener {
            val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI)
            startActivityForResult(gallery, 100)
        }
        return view
    }

    private fun fetchContent(title:String, content:String){
        val userId = auth.currentUser?.uid ?: return
        val currentDateTime = Calendar.getInstance().time
        val dateFormat = SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.KOREA).format(currentDateTime)

        val key = ContentData.boardRef.push().key.toString()

        ContentData.boardRef
            .child(key)
            .setValue(ContentModel(title, content, userId, dateFormat))
        Toast.makeText(requireContext(), "게시글 업로드 성공!", Toast.LENGTH_SHORT).show()
        ImageUpload(key)
    }

    private fun ImageUpload(key:String){

        val storage = Firebase.storage
        val storageRef = storage.reference
        val mountainsRef = storageRef.child(key + ".png")
        val imageView = binding.imageArea

        // Get the data from an ImageView as bytes
        imageView.isDrawingCacheEnabled = true
        imageView.buildDrawingCache()
        val bitmap = (imageView.drawable as BitmapDrawable).bitmap
        val baos = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
        val data = baos.toByteArray()

        var uploadTask = mountainsRef.putBytes(data)
        uploadTask.addOnFailureListener {
            // Handle unsuccessful uploads
        }.addOnSuccessListener { taskSnapshot ->
                // taskSnapshot.metadata contains file metadata such as size, content-type, etc.
                // ...
        }
    }


    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(resultCode == RESULT_OK && requestCode == 100){
            val selectedImageUri = data?.data
            selectedImageUri?.let { uri ->
                binding.imageArea.setImageURI(uri)
                val layoutParams = binding.imageArea.layoutParams
                layoutParams.width = 300 // 원하는 너비 설정
                layoutParams.height = 300 // 원하는 높이 설정
                binding.imageArea.layoutParams = layoutParams
            }
        }
    }

}

 

android kotlin firebase

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

님의 안드로이드 스튜디오에서 이미지 업로드 없이 게시글을 작성할 수 있게 하려면, ImageUpload(key) 함수 호출 부분을 조건에 따라 실행하도록 수정해야 합니다. 현재 코드는 이미지가 있든 없든 상관없이 ImageUpload(key) 함수를 호출합니다. 이미지가 없는 경우에는 ImageUpload 함수를 호출하지 않도록 조건을 추가해주어야 합니다.

imageView.drawablenull인지 확인하는 조건을 추가하여 이미지가 있을 때만 ImageUpload(key)를 호출하도록 변경해 볼 수 있습니다. 이를 위해 fetchContent 함수에서 ImageUpload(key)를 호출하는 부분을 다음과 같이 수정할 수 있습니다.

    private fun fetchContent(title:String, content:String){
        val userId = auth.currentUser?.uid ?: return
        val currentDateTime = Calendar.getInstance().time
        val dateFormat = SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.KOREA).format(currentDateTime)

        val key = ContentData.boardRef.push().key.toString()

        ContentData.boardRef
            .child(key)
            .setValue(ContentModel(title, content, userId, dateFormat))
        Toast.makeText(requireContext(), "게시글 업로드 성공!", Toast.LENGTH_SHORT).show()
        
        // 이미지가 있을 경우에만 ImageUpload 호출
        if(binding.imageArea.drawable != null) {
            ImageUpload(key)
        }
    }

이 변동 사항은 binding.imageArea.drawablenull인 경우, 즉, 이미지가 선택되지 않았을 때 ImageUpload(key) 함수를 호출하지 않도록 변경했습니다. 이렇게 하면 이미지 없이 게시글을 업로드할 수 있게 됩니다.

이미지가 기본이미지인지 확인

0

127

1

NavController error 발생

0

138

1

fragment 생성하고 메인에서 불러왔는데 안뜹니다.

0

135

2

67강 댓글

0

94

2

7강 데이터바인딩 에러

0

109

2

Firebase 스토리지 유료화 문제

1

290

2

게시글 이미지가 파이어베이스에 저장되지 않습니다.

0

178

2

AVD 갤러리에 이미지 저장 안되는 문제

0

237

2

이미지 받아오는 방법?

0

200

2

회원탈퇴 기능을 추가하려고 합니다.

0

185

2

상태바 질문 드립니다.

0

107

1

섹션2 인트로 페이지 꾸미기 질문 드립니다.

0

107

1

게시판 글을 길게 쓸경우

0

121

2

로그인 로그아웃

0

173

2

갤럭시 연결시 게시판에 업로드한 사진이 보이지 않아요.

0

199

2

웹뷰 AVD 실행안됨

0

188

1

자막켜기가 안되요 ㅜ.ㅜ

1

183

1

리사이클러뷰, 그리드레이아웃 오류

0

184

2

리사이클러뷰 오류 해결 방법이 궁금합니다.

0

192

1

firebase 스마트폰으로 연결이 안되는데 원인이 있을까요

0

253

2

firebase 설정 오류

0

293

2

홈 화면 커뮤니티

0

173

1

게시판 글 읽기

0

234

2

카테고리 북마크 질문입니다.

0

169

1