안녕하세요. 강의 잘 듣고 있습니다. 질문란을 보니 저와 같은 분들이 질문을많이 올려주셨는데, 해결책을 알려드리려고 합니다. INTERNET permission을 추가하고 앱을 실행한 다음에, 안드로이드 에뮬레이터에서 앱을 삭제하고 다시 실행 하셔야 정상적으로 이미지가 뜨는 것을 확인할 수 있습니다. 열공하세요!
게시글 수정 단계에서 사진 또한 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
수업중에 1:23 에서 레퍼런스 주소를 가져온다고 하시면서 복사 붙여 넣기 하셨는데 그냥 통째로 잘라넣기 하면 왜 안되는지 궁금합니다. 그리고, 복사 - 붙여 넣기 후 save 버튼 클릭 리스너 안에서는 myRef에 user마다 개인적인 데이터베이스를 만들기 위해서 child()를 추가해주셨는데(14:54) , 1:27 (복사 - 붙여넣기 한) 위치 의 myRef에는 child() 속성(?)을 넣어주지 않아도 되나요?
안녕하세요 영한님! 강의 내용을 코틀린 기반으로 작성해보고 있는데요! 조금 다른 부분들이 있긴 하지만 여러 리서치를 해보며 정상 동작하는 것들을 확인했는데 굉장히 특이한 문제를 만나서 조언을 구하고자 질문 드립니다. MemberService의 MemberRepository를 SpringConfig에서 의존성 주입을 해준 뒤 실제 메서드에서 해당 repository를 호출해보니 repository가 null이어서 접근할 수 없다는 메시지와 함께 에러가 발생하였습니다. 이에 대해 조금 조사해 본 결과 @Transactional를 추가하게 되면 구성된 의존성에 접근이 되지 않는 문제가 있었습니다. 그러나 이 생성자에서 받아온 의존성을 open 제한자로 변경하여 받아오면 접근이 되는 기묘한 현상이 발생하더군요! 관련해서 해결책을 찾은 경로는 여기였습니다. https://stackoverflow.com/questions/41298289/spring-boot-autowired-with-kotlin-in-service-is-always-null 혹시 강의 내용과는 조금 차이가 있지만 왜 이런 현상이 발생하는지 알 수 있을까요? 강의 너무 잘 듣고 있습니다. 항상 감사합니다!
이미지가 기본이미지 인지 아닌지 03:50초에 어떻게 구현해줄수있나요.왜냐면 개복치님이 말씀하신 2번째 로직은 이미지뷰를 클릭하고 취소를 하는 경우에는 이미지가 들어가있지 않지만 isImageUpload가 ture상태로 머물기때문에 결국에는 업로드됩니다 그래서 개복치님이 말씀해주신 첫번째 로직으로 구현해주고싶은데,첫번째 로직으로 만드는법도 추가해주시면 좋을거같습니다!! 여기서 말하는 첫번째 로직은 이미지가 기본이미지 인지 아닌지 이고 두번째 로직은 imageView가 클릭됬는지 안됬는지 입니다.
파이어베이스 -> Database가 아닌 Cloud Firebase입니다. 업데이트 되어 영상과 좀 다릅니다. rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth.uid != null; } } }
일반 아이디 비밀번호 입력, 페이스북 , 구글 로그인이 원래는 로그인 후 main으로 넘어가고 user에도 잘 뜨던게 어느 순간부터 저런 메시지가 뜨고 버튼만 누르면 그냥 자동으로 앱이 종료가 됩니다,, 근데 user에는 표시가 되는데 그다음이 문제인거 같아요 이메일 주소당 여러계정은 허용해놨습니다 ( 저번 질문에서 비슷한 문제를 앱크래시?라고 알려주셔서 crashlytics를 해봤는데 아무것4도 안뜨네요 ㅠㅠ)