작성
·
124
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)
함수를 호출하지 않도록 변경했습니다. 이렇게 하면 이미지 없이 게시글을 업로드할 수 있게 됩니다.