인프런 커뮤니티 질문&답변
안드로이드 스튜디오 게시글 이미지 업로드 유무
작성
·
198
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
}
}
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
님의 안드로이드 스튜디오에서 이미지 업로드 없이 게시글을 작성할 수 있게 하려면, ImageUpload(key) 함수 호출 부분을 조건에 따라 실행하도록 수정해야 합니다. 현재 코드는 이미지가 있든 없든 상관없이 ImageUpload(key) 함수를 호출합니다. 이미지가 없는 경우에는 ImageUpload 함수를 호출하지 않도록 조건을 추가해주어야 합니다.
imageView.drawable이 null인지 확인하는 조건을 추가하여 이미지가 있을 때만 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.drawable가 null인 경우, 즉, 이미지가 선택되지 않았을 때 ImageUpload(key) 함수를 호출하지 않도록 변경했습니다. 이렇게 하면 이미지 없이 게시글을 업로드할 수 있게 됩니다.





