인프런 커뮤니티 질문&답변

최재훈님의 프로필 이미지
최재훈

작성한 질문수

[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)

게시글 수정 만들기 - 2

글 수정 단계에서 사진도 수정하려고 하다가 문제가 발생했습니다.

작성

·

385

0

 게시글 수정 단계에서  사진 또한 BoardWriteActivity에서와 마찬가지로 startActivityForResult으로 변경할 수 있게 만들어보려고 했습니다. 그러나 이번에는 또 어떤 값이 전달되지 않는 것인지 NullPointerException 오류가 뜨고 있습니다.

  이 코드를 복사해온 BoardWriteActivity는 정상작동하는 것을 보니 리퀘스트코드가 겹치는게 문제인가 싶어 바꿔주어 보아도 안되고setResult(RESULT_OK)등의 명령어를 통해 Result 값을 지정해보는 등의 시도는 해봤지만, 전혀 차도가 없습니다.

 강의에서 하지 않은 것을 가고 만지작거리다가  질문드리는게 죄송하지만, 이 오류의 해결법에 대해 질문드려도 괜찮을까요?

  

 

 우선 오류가 발생한 BoardEditActivity입니다.

class BoardEditActivity : AppCompatActivity() {
private lateinit var binding: ActivityBoardEditBinding
private lateinit var key: String
private lateinit var Wuid: String


override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)
setContentView(R.layout.activity_board_edit)

binding = DataBindingUtil.setContentView(this, R.layout.activity_board_edit)
key = intent.getStringExtra("key").toString()
getBoardData(key)
getImageData(key)

binding.BEAPUSHbtn.setOnClickListener {
editBoardText(key)
}
binding.BEAIMG1.setOnClickListener {
val key = FBRef.boardRef.push().key.toString()
val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI)
startActivityForResult(gallery, 50)
}
}
private fun getImageData(key: String) {
Log.d("키값 검사", key.toString())
// Reference to an image file in Cloud Storage
val storageReference = Firebase.storage.reference.child(key + ".png")
// ImageView in your Activity
val imageViewFromFB = binding.BEAIMG1
storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task ->
if (task.isSuccessful) {
Glide.with(this)
.load(task.result)
.into(imageViewFromFB)
}
else {
Toast.makeText(this, "이미지가 없습니다", Toast.LENGTH_LONG).show()
}
})
}
private fun getBoardData(key: String) {
val postListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
try {
val dataModel = dataSnapshot.getValue(BoardModel::class.java)
binding.BEAED1.setText(dataModel!!.title)
binding.BEAED2Context.setText(dataModel!!.title)
Wuid = dataModel!!.uid
} catch (e: Exception) {
Log.d("삭제완료","Delete")
}
}
override fun onCancelled(databaseError: DatabaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
}
}
FBRef.boardRef.child(key).addValueEventListener(postListener)
}
private fun editBoardText(key: String) {
val time = firebaseauth.getTime()
FBRef.boardRef
.child(key)
// .push()
.setValue(
BoardModel(
binding.BEAED1.text.toString(),
binding.BEAED2Context.text.toString(),
Wuid, time
)
)
Toast.makeText(this, "수정 완료", Toast.LENGTH_LONG).show()

finish()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK && requestCode == 50) {
Log.d("데이터 체커", data.toString())
val BEI1 = findViewById<ImageView>(R.id.BEI1)
Glide.with(this).load(data?.data).into(BEI1)
}
}
}

  문제가 된다고 생각한 로그캣의 오류 페이지입니다.

 

4번째 줄의 로그가 잘렸는데, 혹시 잘린부분이 필요하실까 싶어 잘린부분의 로그도 올립니다.

    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=50, result=-1, data=Intent { dat=content://com.google.android.apps.photos.contentprovider/-1/1/content://media/external/images/media/27/ORIGINAL/NONE/image/jpeg/1468372150 flg=0x1 clip={text/uri-list {...}} }} to activity {com.beyond.collect/com.beyond.collect.board.BoardEditActivity}: java.lang.NullPointerException: Argument must not be null

 

 

 

답변 2

1

최재훈님의 프로필 이미지
최재훈
질문자

선생님 감사합니다. 우선 여러가지 코드를 실험해보다가, 저 부분에 Glide 코드를 통해 이미지를 교체하려고 한 부분이 오류라는 점을 알아냈습니다.

Glide.with(this).load(data?.data).into(BEI1)

이 코드를 

binding.BEI1.setImageURI(data?.data)

로 교체했더니 잘 작동합니다. 감사합니다.

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

안녕하세요. 코드를 변경해서 공부하는 방법을 좋은 공부방법인 것 같습니다.

우선적으로 제가 직접 코드를 돌려보지 않고 현재 정보만 보았을 때 

ResultInfo{who=null,

이 부분에서 who=null이라고 되어있는데, 받아온 데이터가 null인데, 이 데이터를 어딘가에 사용하려고 해서 nullpointexception이 나오는게 아닐까 싶습니다.

who 이 부분에 값을 채워넣는 방향으로 한번 구현해보시겠어요?

 

최재훈님의 프로필 이미지
최재훈

작성한 질문수

질문하기