묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
파이어베이스 익명로그인 강의 09:01 부분 문의
해당 부분 에서 FirebaseAuth, Firebase는 자동으로 import가 되는데 Firebase.auth 부분에서 뒤에 auth가 자동 import가 뜨질 않고 Unresolved reference:auth 에러가 계속 발생합니다. 한 번만 확인해주시면 감사하겠습니다. // LoginActivity package com.fitdback.userinterface import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.Toast import com.fitdback.pointdetection.R import com.google.firebase.auth.FirebaseAuth import com.google.firebase.ktx.Firebase class LoginTestActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login_test) // Initialize Firebase Auth auth = Firebase.auth val btnAnonymousLogin = findViewById<Button>(R.id.btnAnonymousLogin) btnAnonymousLogin.setOnClickListener { auth.signInAnonymously() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d("LoginTestActivity", "signInAnonymously:success") val user = auth.currentUser // updateUI(user) } else { // If sign in fails, display a message to the user. Log.w("LoginTesetActivity", "signInAnonymously:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT ).show() // updateUI(null) } } } } } // build.gradle(app) apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.gms.google-services' android { compileSdkVersion buildConfig.compileSdk defaultConfig { applicationId 'com.fitdback.userinterface' minSdkVersion buildConfig.minSdk targetSdkVersion buildConfig.targetSdk versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static' cppFlags "-std=c++11","-frtti", "-fexceptions" } } ndk { abiFilters 'armeabi-v7a' } } // externalNativeBuild { // cmake { // path "CMakeLists.txt" // } // } lintOptions { abortOnError false } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } aaptOptions { noCompress "tflite" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } repositories { maven { url 'https://google.bintray.com/tensorflow' } flatDir { dirs 'libs' } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':openCVLibrary341') implementation deps.kotlin.stdlib.jdk // implementation(name:'tensorflow-lite', ext:'aar') implementation deps.android.support.appcompatV7 implementation deps.android.support.constraintLayout implementation deps.android.support.design implementation deps.android.support.annotations implementation deps.android.support.supportV13 implementation deps.timber implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly' implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly' // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:29.2.1') // Declare the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx' testImplementation deps.junit androidTestImplementation(deps.android.test.espresso, { exclude group: 'com.android.support', module: 'support-annotations' }) }
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming
41강 AutoCompleteTextView강의 영상 중 onItemClick 이벤트 관련 질문입니다.
안녕하세요. 41강 영상 13분 부분을 직접 실습해 보면 abcd, abca, abcb, abcc, bbaa, bcab, bdab <--data1 오토컴플리트텍스트뷰 창에 a를 입력했을 때 자동완성으로 뜬 것을 클릭하면 textView2 창에 제대로 된 데이타가 뜹니다. 하지만 b를 입력했을 때 자동완성으로 뜬 것을 클릭하면 엉뚱한 것이 뜹니다. 아마도 b를 입력한 상태에서 뜨는자동완성 리스트 중 첫번째인 bbaa를 포지션 0 값으로 넘겨주기 때문에 발생하는 문제 같습니다. 그렇기 때문에 단순히 data1[position]을 하게 되면 원래 data1의 첫번째인 abcd가 화면에 나오게 되네요. (여기서는 bbaa가 떠야되는데 말입니다) 아마도 OnItemClickListener 인터페이스를 구현하는 과정에서 onItemClick 메서드에 position 값으로 넘어오는 값의 문제 같은데, 이를 해결하는 방법이 없을까요?
-
미해결
앱 관련하여 궁금한 점이 있습니다.
안녕하세요. 어플관리에 대해서 질문을 하고 싶어서 글을 쓰게 되었습니다. 제가 지금 어플을 하나 운영을 하고 있는데 업데이트 과정을 거치려고 합니다. 업데이트를 할 때 소식창, 알리미 창 처럼 정보를 계속해서 제공해주는 탭을 하나 만들려고 하는데 제휴되어 있는 타 사이트의 링크를 끌어와서 자동적으로 타 사이트에서 올라오면 제 앱에서도 같이 올라오게 했으면 좋겠는데 혹시 방법이 있을까요? 사정상 앱에만 몰두 할 수가 없어서 타 사이트의 글을 그대로 앱에 게시글화 시키고 싶은데.. 최소한으로 제가 개입이 된다면 해당 사이트의 주소를 넣으면 자동으로 앱에서 게시글화 시킬 수 있는 방법이 혹시 있을까요..?
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스 사진 여러장 업로드 방법 좀 알려주세요.
당근마켓 같이 상품 올릴때 사진올리잖아요. 그런형태를 원합니다. 그래서 리사이클러뷰 형태로 아이템에 사진이 나오게는 했습니다. private fun imageUpload(key: String) {} saveBtn.setOnClickListener {imageUpload(key) finish()} 강의에서는 1개만 업로드 하셨는데 사진 여러장을 업로드는 어떻게 하나요? 구글링, 유튜브 찾아봤는데 여러장 올리는건 드물고 자바형식에..... 도저히 안되서 질문 드려요.
-
해결됨안드로이드 앱 모의해킹/분석 시작하기 (With.IDA/JEB/Frida)
so파일 디버깅 에러 문의드려요
살기기 64bit 에서 안드로이드 서버 실행후 포트열고 lib\arm64-v8a\libnative-lib.so 를 ida로 실행후 앱 패키지에 attach까지는 되었는데요 (ida 7.0버전) attach 순간 아래와 같이 에러가 나면서 어떠한 버튼을 눌러도 안되더라고요 해결방법이 있을까요???
-
해결됨안드로이드 앱 모의해킹/분석 시작하기 (With.IDA/JEB/Frida)
odex 파일 추출 에러 질문입니다
odex 파일 메모리맵에서 adb로 추출한다음 dex파일로 변경하려고 하는데 에러나서 문의드려요 녹스에서 추출한파일은 test.dex, 실기기에서 추출한파일은 test.odex파일 이렇게 되던데 둘다 backsmali 사용시 에러가 나네요;;; backsmali 버전을 달리해도 에러나고 방법 문의드립니다
-
해결됨[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
메인 슬라이딩 화면구현 CardStackView 구현 강의 4분 30초쯤 질문드려요!
<com.yuyakaido.android.cardstackview.CardStackView android:layout_width="match_parent" android:layout_height="match_parent"/> 이렇게 작성하니 Class referenced in the layout file, com.yuyakaido.android.cardstackview. CardStackView, was not found in the project or the libraries Cannot resolve class com.yuyakaido.android.cardstackview.CardStackView 이런 에러가 뜨네요 뭐 따로 설치 해야하는건가요??
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스에 글이 정상적으로 입력되었는지 여부를 알 수 있어야
파이어베이스에 글이 정상적으로 입력되었는지 여부를 알 수 있어야 입력완료 메시지를 띄우고 그렇지 않고 글입력 실패일 경우에는 토스트 메시지가 달라질 것 같습니다. 물론 실패할 경우 finish도 실행하지 않게 되겠지요? 파이어베이스로부터 입력 결과를 알아를 확인하는 절차에 관해서도 함께 다루어주세요.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
이미지 안 뜰 때 해결법!
안녕하세요. 강의 잘 듣고 있습니다. 질문란을 보니 저와 같은 분들이 질문을많이 올려주셨는데, 해결책을 알려드리려고 합니다. INTERNET permission을 추가하고 앱을 실행한 다음에, 안드로이드 에뮬레이터에서 앱을 삭제하고 다시 실행하셔야 정상적으로 이미지가 뜨는 것을 확인할 수 있습니다. 열공하세요!
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part 3 - 데이터관리와 네트워크
마지막에 버튼 안되시는 분들
https://velog.io/@seokzoo/Drawble-Selector%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-Button-%EB%A7%8C%EB%93%A4%EA%B8%B0 참고하시면 도움되실겁니다.
-
미해결현직 개발자가 알려주는 안드로이드 앱 쉽게 만드는 방법
2년전코드라 작동안되서 강의 포기하다가 인프런 발견했는데 또 유튜브링크 연결되면
또 안되는거잖아요 되는 강의도 있지만 안되는강의가 있어요
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 삭제 기능 구현 질문
안녕하세요 강의를 열심히 듣고있는 수강생입니다! 다름이 아니라 댓글 불러오기 강의를 수강한 이후 게시판 삭제 기능처럼 댓글도 똑같이 자기가 작성한 댓글을 삭제하도록 구현해보고 있는데 난관에 봉착하여 질문드리게 됐습니다.. binding.deleteIcon.setOnClickListener { itemClickListener.onClick(it, position) } val myUid = FBAuth.getUid() val writerUid = items[position].commentUid if(myUid.equals(writerUid)){ binding.deleteIcon.isVisible = true } else{ } } } interface OnItemClickListener { fun onClick(v: View, position: Int) } // (3) 외부에서 클릭 시 이벤트 설정 fun setItemClickListener(onItemClickListener: OnItemClickListener) { this.itemClickListener = onItemClickListener } // (4) setItemClickListener로 설정한 함수 실행 private lateinit var itemClickListener : OnItemClickListener} 우선 commentrvadpater에서 댓글아이템에 내가 작성한 댓글에 uid가 같으면 삭제 아이콘이 보이게끔 하는걸 뷰홀더에 적용시켰고, 성공했습니다. commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() }}) 리사이클러뷰 클릭 이벤트를 boardinsideactivity 즉, 게시판 내부를 구현해주는 액티비티에 구현하여 삭제아이콘을 누르면 댓글이 삭제가 완료되고 토스트메시지까지 띄워졌습니다. 하지만 문제가 생겼습니다.. 위에서 삭제 아이콘을 누르면 게시판 내에 댓글이 모두 삭제됩니다. 리얼타임베이스 시점에서 보면 게시판 key값 내에 파란 부분만 삭제하고 싶은데 빨간부분 모두 삭제됩니다 ..ㅠ commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() }}) 아마 이 코드에서 child에 있는 key값을 지워주는게 아닌 다른 값을 지워줘야 되는게 문제인거 같은데 child 안에 무슨 값을 넣어줘야될지 잘 모르겠습니다... class BoardInsideActivity : AppCompatActivity() { private lateinit var binding: ActivityBoardInsideBinding private lateinit var key : String private val TAG = BoardInsideActivity::class.java.simpleName private val CommentDataList = mutableListOf<CommentModel>() private lateinit var commentAdapter:CommentRVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityBoardInsideBinding.inflate(layoutInflater) setContentView(binding.root) binding.boardSettingIcon.setOnClickListener { showDialog() } key = intent.getStringExtra("key").toString() getBoardData(key) getImageData(key) binding.commentBtn.setOnClickListener { insertComment(key) } getCommentData(key) commentAdapter = CommentRVAdapter(this,CommentDataList) binding.commentRV.adapter = commentAdapter binding.commentRV.layoutManager= LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) binding.commentRV.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL)) commentAdapter.setItemClickListener(object: CommentRVAdapter.OnItemClickListener{ override fun onClick(v: View, position: Int) { FBRef.commentRef.child(key).removeValue() Toast.makeText(this@BoardInsideActivity,"댓글 삭제 완료", Toast.LENGTH_SHORT).show() } }) } fun getCommentData(key:String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { CommentDataList.clear() for(dataModel in dataSnapshot.children) { Log.d(TAG,dataModel.toString()) dataModel.key val item = dataModel.getValue(CommentModel::class.java) CommentDataList.add(item!!) } commentAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.commentRef.child(key).addValueEventListener(postListener) } fun insertComment(key :String) { FBRef .commentRef .child(key) .push() .setValue( CommentModel( binding.commentArea.text.toString(), FBAuth.getTime(), FBAuth.getUid() ) ) Toast.makeText(this,"입력 완료", Toast.LENGTH_SHORT).show() binding.commentArea.setText("") } private fun showDialog(){ val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null) val mBuilder = AlertDialog.Builder(this) .setView(mDialogView) .setTitle("게시글 수정/삭제") val alertDialog = mBuilder.show() alertDialog.findViewById<Button>(R.id.editBtn)?.setOnClickListener { val intent = Intent(this, BoardEditActivity::class.java) intent.putExtra("key",key) startActivity(intent) alertDialog.cancel() } alertDialog.findViewById<Button>(R.id.removeBtn)?.setOnClickListener { FBRef.boardRef.child(key).removeValue() Toast.makeText(this,"삭제 완료",Toast.LENGTH_SHORT).show() finish() } } private fun getImageData(key: String){ // Reference to an image file in Cloud Storage val storageReference = Firebase.storage.reference.child(key + ".png") // ImageView in your Activity val imageViewFromFB = binding.getImageArea storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task-> if(task.isSuccessful){ Glide.with(this) .load(task.result) .into(imageViewFromFB) } else{ binding.getImageArea.isVisible=false } }) } private fun getBoardData(key: String) { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { try { val dataModel = dataSnapshot.getValue(BoardModel::class.java) dataModel!!.title?.let { Log.d(TAG, it) } binding.titleArea.text = dataModel!!.title binding.textArea.text = dataModel!!.content binding.timeArea.text = dataModel!!.time binding.uidArea.text = dataModel!!.uid val myUid = FBAuth.getUid() val writerUid = dataModel.uid if(myUid.equals(writerUid)){ binding.boardSettingIcon.isVisible = true } else{ } } catch (e:Exception){ Log.d(TAG,"삭제완료") } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.child(key).addValueEventListener(postListener) }} 이건 전체 코드입니다.
-
해결됨밥 먹으면서 듣는 안드로이드 개념잡기
강의자료
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의자료는 따로 안올려주시나요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
09:55 질문입니다!
-package com.daeyeon.fb_firebase_email_password_auth import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport android.widget.Buttonimport android.widget.EditTextimport android.widget.Toastimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.ktx.authimport com.google.firebase.ktx.Firebaseclass MainActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) auth = Firebase.auth val joinBtn = findViewById<Button>(R.id.joinBtn) joinBtn.setOnClickListener { val email = findViewById<EditText>(R.id.emailArea) val password = findViewById<EditText>(R.id.passwordArea) Log.d("MAIN", email.text.toString()) Log.d("MAIN", password.text.toString()) auth.createUserWithEmailAndPassword(email.text.toString(), password.text.toString()) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Toast.makeText(this, "성공", Toast.LENGTH_LONG).show() } else { // If sign in fails, display a message to the user. Toast.makeText(this, "실패", Toast.LENGTH_LONG).show() } } } } } 이메일 비번을 치고 회원가입을 누르면 자꾸 실패가 떠요!....
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
nextInt가 import가 안됩니다.
alt+enter를 눌러도 임포트가 계속 안되는데 혹시 이유를 알수 있을까요? 혹시 몰라 MainActivity의 코드를 첨부하겠습니다!감사합니다! package com.example.dice_appimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport android.widget.Toastimport androidx.databinding.DataBindingUtilimport com.example.dice_app.databinding.ActivityMainBindingimport java.util.*import kotlin.random.Random.Default.nextIntclass MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) val diceImage1 = binding.dice1 val diceImage2 = binding.dice2 binding.diceStartBtn.setOnClickListener { Toast.makeText(this, "주사위 GO!", Toast.LENGTH_LONG).show() Log.d("MainActivity", Random.nextInt(1, 6).toString()) Log.d("MainActivity", Random.nextInt(1, 6).toString()) val number1 = Random.nextInt(1, 6) val number2 = Random.nextInt(1,6) if (number1 ==1 ){ diceImage1.setImageResource(R.drawable.dice_1) } else if(number1 == 2){ diceImage1.setImageResource(R.drawable.dice_2) } else if(number1 == 3){ diceImage1.setImageResource(R.drawable.dice_3) } else if(number1 == 4){ diceImage1.setImageResource(R.drawable.dice_4) } else if(number1 == 5){ diceImage1.setImageResource(R.drawable.dice_5) } else { diceImage1.setImageResource(R.drawable.dice_6) } if (number2 ==1 ){ diceImage2.setImageResource(R.drawable.dice_1) } else if(number2 == 2){ diceImage2.setImageResource(R.drawable.dice_2) } else if(number2 == 3){ diceImage2.setImageResource(R.drawable.dice_3) } else if(number2 == 4){ diceImage2.setImageResource(R.drawable.dice_4) } else if(number2 == 5){ diceImage2.setImageResource(R.drawable.dice_5) } else { diceImage2.setImageResource(R.drawable.dice_6) } } }}
-
미해결파이어베이스(Firebase)를 이용한 웹+안드로이드 메모 어플리케이션 만들기
firebase list err 해결
영상에서는 터미널에서 firebase login을 한 뒤, firebase list 를 입력하면 연결된 프로젝트를 확인할 수 있다고 나오는데 버전이 달라져서 firebase projects:list 라고 입력해야 확인이 가능합니다! firebase list 라고 입력하면 Error: list is not a Firebase command 이렇게 에러가 납니다. 참고하세요 :)
-
미해결윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming
MainActivity에서 id로 코드를 작성할 수 없는 문제
안녕하세요 선생님! 강의를 듣던 중에 막히는 부분이 있어서 질문드립니다. 보시는 바와 같이, textview를 삽입하고 id를 text1,text2로 한 후에 코드를 작성하는 부분을 실습하던 중이었는데, 강의에서 코틀린으로는 id를 통해 바로 view 객체를 다룰 수 있다고 하셨는데, 저는 그 부분이 되지 않습니다. 프로젝트를 생성할 때 language에서 Kotlin을 선택한 것도 확인을 했는데, 왜 이런 문제가 생길까요?
-
미해결현직 개발자가 알려주는 안드로이드 앱 쉽게 만드는 방법
preview라는 창이 안떠요
밑에 Text라는 칸과 preview가 안떠요
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
글 수정 단계에서 사진도 수정하려고 하다가 문제가 발생했습니다.
게시글 수정 단계에서 사진 또한 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
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
이미지 추가 버튼 누를 시 앱이 팅깁니다.
안녕하세요. 아래의 코드를 적용한 뒤 이미지 추가 버튼을 클릭하면 앱이 아예 꺼집니다. //ImagePicker final ImagePicker _picker = ImagePicker(); File? _imageFile; //갤러리 연동을 위해 사용 Future<void> _getImage() async { //ImagePiker var image = await _picker.pickImage(source: ImageSource.gallery); setState(() { _imageFile = File(image!.path); }); } } sdk 2.12, imagePicker 패키지는 0.8.4 버전이고 연결이 끊겼다는것 외에는 다른 오류는 출력되지 않습니다. create_page.dart의 전체 코드입니다. import 'dart:io'; import 'dart:async'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; //갤러리 또는 카메라 연동하는 패키지 class createPage extends StatefulWidget { const createPage({Key? key}) : super(key: key); @override _createPageState createState() => _createPageState(); } class _createPageState extends State<createPage> { //입력창을 위한 객체 생성 final TextEditingController createText = TextEditingController(); //ImagePicker final ImagePicker _picker = ImagePicker(); File? _imageFile; //갤러리 연동을 위해 사용 //dispose : 객체가 해제될 때 (더 이상 사용되지 않을때) 그 객체에 있던 메모리를 삭제, 자원 관리를 위해 사용 //_createPageState가 제거될 때 호출됨 @override void dispose() { // TODO: implement dispose createText.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: _buildAppbar(), body: _buildBody(), //메소드 생성해서 정의 floatingActionButton: FloatingActionButton( //갤러리에서 이미지 가져오기 (image_picker 패키지 사용) onPressed: _getImage, backgroundColor: Colors.blue, child: Icon(Icons.add_a_photo), ), ); } _buildAppbar() { return AppBar( //앱바 오른쪽에 아이콘 생성 actions: [ Icon(Icons.send), ], ); } _buildBody() { return SingleChildScrollView( //스크롤 추가 child: Column( children: [ //이미지 출력 부분 //이미지가 선택되지 않았을 때(null)는 텍스트 출력, 선택되었다면 선택된 이미지를 출력 _imageFile == null ? Text("No Image") : Image.file(_imageFile!), //입력창 생성 TextField( controller: createText, //텍스트필드의 스타일 설정 decoration: InputDecoration( hintText: "내용을 입력하세요", //기본값 ), ) ], ), ); } //갤러리 연동 //이미지를 File로 만들어 줘야하기 때문에 비동기 처리 방식 사용? Future<void> _getImage() async { //ImagePiker var image = await _picker.pickImage(source: ImageSource.gallery); setState(() { _imageFile = File(image!.path); }); } } _getImage 메소드의 문제일까요? 감사합니다.