35,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
안녕하십니까!! 질문이 하나 있씁니다
혹시 파이어스토어에 컬렉션을 만들때코틀린 코드로 만들려고 하는데코틀린 코드로 콜렉션만 만들 수는 없나요??db.collection("asdad").add()저런 식으로 컬렉션만 만들 수 없나요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
안녕하세요 열공중인 학생입니다
안녕하세요 이 강의를 보고 열심히 공부 중입니다다름이 아니라 혹시 이 강의와는 별개지만파이어스토어에 도큐멘터리ID를 렌덤으로 지정해 주었는데요이 렌덤으로 지정된 도큐멘터리ID를 코틀린으로 가져 올 수 있는 방법이 있을까요?
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
이미지업로드관련 질문
writeActivity에서 storage로 키값이 전송이 된것은 확인이 되었는데 insideActivity에서 storage에 있는 key값이 안들어옵니다. 자세하게는 mountain.jpg랑 key를 직접 복붙한것은 되는데 key+".png"가 안됩니다. 그리고 toast로 실험해봤을 때 'key = intent.getStringExtra("key").toString()' 가 null이라고 출력이됩니다.아래는 insideActivity입니다.package com.example.knunity.board import android.os.Bundle import android.util.Log import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import com.bumptech.glide.Glide import com.example.knunity.databinding.ActivityBoardInsideBinding import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.ktx.Firebase import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.ktx.storage class BoardInsideActivity : AppCompatActivity() { private lateinit var key: String private val binding: ActivityBoardInsideBinding by lazy { ActivityBoardInsideBinding.inflate(layoutInflater) } lateinit var datas: BoardModel private val Tag = BoardInsideActivity::class.java.simpleName override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) // val title = intent.getStringArrayExtra("title").toString() //val contents = intent.getStringArrayExtra("contents").toString() //val time = intent.getStringArrayExtra("time").toString() //val uid = intent.getStringArrayExtra("uid").toString() datas = intent.getSerializableExtra("data") as BoardModel binding.titlePage.text = datas.title binding.contentPage.text = datas.contents binding.timePage.text = datas.time key = intent.getStringExtra("key").toString() Log.d("test", key) getImagefromFB(key) // Log.d(Tag, title) // Log.d(Tag, contents) // Log.d(Tag, time) } private fun getImagefromFB(key: String) { val storageReference = Firebase.storage.reference.child(key+".png") val imageViewFromFB = binding.imagePage storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task -> if (task.isSuccessful) { Glide.with(this) .load(task.result) .into(imageViewFromFB) } else { imageViewFromFB.isVisible = false Toast.makeText(this,key,Toast.LENGTH_SHORT).show() } }) } // 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 imageViewFB = binding.imagePage // // // // storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task -> // if (task.isSuccessful) { // Glide.with(this) // .load(task.result) // .into(imageViewFB) // } else { // Toast.makeText(this, "FAIL TO LOAD", Toast.LENGTH_SHORT).show() // } // }) // // } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
이미지 업로드 질문
안녕하세요 이미지 업로드 관련해서 질문드립니다.저가 이미지 업로드+스토리지 저장 이부분 하고 있는데 WriteActivity부분에서 이미지업로드시 이미지를 눌렀을 때 이미지 크기가 커서 등록버튼이 밑으로 내려가서 등록버튼이 안보이는 상황이 생기는데 이 write레이아웃에 업로드 하는 이미지 파일 크기를 어떻게 조절해야 할지 아니면 다른 대책으로 어떻게 해야할지 모르겠습니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시물 업로드 관련 질문
class BoardWriteActivity : AppCompatActivity() { private lateinit var binding : ActivityBoardWriteBinding private val TAG = BoardWriteActivity::class.java.simpleName override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val database = Firebase.database //binding=DataBindingUtil.setContentView(this,R.layout.activity_board_write) setContentView(R.layout.activity_board_write) binding = ActivityBoardWriteBinding.inflate(layoutInflater) binding.writebtn.setOnClickListener { val title = binding.titleArea.text.toString() val contents = binding.contentArea.text.toString() Log.d(TAG,title) Log.d(TAG,contents) FBRef.boardRef .push() .setValue(BoardModel(title,contents,"uid","time")) } } } 빨간줄로 그이는 오류는 없는데 등록 버튼 눌렀을 때logcat에 뜨는게 없네요. 이유좀 알려주세요
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
textview에 이미지 삽입하고 이미지만 클릭가능하게만들기
<TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:ellipsize="end" android:maxLines="1" android:padding="5dp" android:text="title" android:drawableRight="@drawable/ic_baseline_delete_24" android:drawablePadding="5dp" android:clickable="true" android:textSize="18sp" /> 이런식으로 하면 이렇게 처리가 되더라구요근데 저는 우측에 저 쓰레기통 눌렀을때만 액션이 발생했으면 좋겠는데 이런경우에는 어떻게 커스텀할수있나요?사실 그냥 이미지뷰 나눠서 넣으면 상관없긴한데 혹시 가능한가싶어서요
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
웹뷰를 적용한 페이지에 뷰바인딩(네비게이션) 이동 적용하고 싶을 때
강의에서는 스킵하셨지만, 웹뷰를 적용한 Fragment에도 네비게이션 이동이 적용되게 하고 싶습니다. 아래 코드로는 되지 않는데 어떻게 변경해야 할까요?class TalkFragment : Fragment() { private lateinit var binding : FragmentStoreBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment val view = inflater.inflate(R.layout.fragment_talk, container, false) binding.bookmarkTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment_to_bookmarkFragment) } binding.storeTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment_to_storeFragment) } binding.homeTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment_to_homeFragment) } val WebView: WebView = view.findViewById(R.id.storeWebView) WebView.webViewClient = WebViewClient() WebView.loadUrl("https://www.inflearn.com/") // return inflater.inflate(R.layout.fragment_talk, container, false) return view return binding.root } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
store를 누르면 웹뷰로 이어지게 했는데, 카카오맵이 있는 웹뷰가 로딩되지 않습니다.
카카오맵을 이용한 사이트를 만들었는데 이것을 store에서 웹뷰로 볼 수 있게 하고 싶습니다. 그런데 카카오맵 developers에서 플랫폼 등록을 해야 보이나본데, 여기에선 키해시를 요구하더라구요... 어떻게 해야 웹뷰로 볼 수 있을까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
storeTap에 네비게이션 바인딩 적용하는 방법좀 알려주세요
강의에는 없지만 웹뷰를 적용하고 이전메뉴로 돌아가는 것을 만들고 싶어요. 현재 onCreatedview 에 웹뷰가 적용되어 있는데 여기에 바인딩을 적용시키려면 어떻게 짜야 할까요???class TalkFragment : Fragment() { private lateinit var binding : FragmentStoreBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment val view = inflater.inflate(R.layout.fragment_store, container, false) val webView : WebView = view.findViewById(R.id.storeWebView) webView.loadUrl("https://www.iparimap.kr/") binding= DataBindingUtil.inflate(inflater, R.layout.fragment_talk, container, false) //클릭시 이동하는 곳 binding.homeTap.setOnClickListener { it.findNavController().navigate(R.id.action_storeFragment_to_homeFragment) } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
추가코드가 있는지 여쭤볼려구 합니다.
강의 오른쪽 구름 모양 아이콘으로 코드를 참고해서 다 완성했는데 강의 내용에 마이페이지 부분이나 홈화면 부분 코드가 없어서 질문드렸습니다 ㅠㅠ!!
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
톡 부분 - 작성자만 글을 조회할 수 있게 하려면 보안정책을 어떻게 바꿔야 할까요?
자취톡에서 작성자만 글을 읽게 하려면 파이어베이스 보안 규칙을 어떻게 바꿔야 할까요? 혹은 관리자만 글을 쓸 수 있게 하려면 어떻게 보안 규칙을 써야 할까요? *이렇게 보안 규칙을 만드니, 홈이랑 꿀팁, 자취톡 모두 보이지 않습니다. { // Allow anyone to read data, but only authenticated content owners can // make changes to their data "rules": { "some_path": { "$uid": { ".read": true, // or ".read": "auth.uid !== null" for only authenticated users ".write": false } } } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
realtime database 키값 설정질문
저는 board부터 만드려고 하고, 지금 boardwrite 작성중인데realtime database에 키와 값을 처음에 뭐라고 설정해야 하는지 모르겠습니다.추가적으로 BoardWriteActivity에 val database...를 복붙했는데 .database에서 import오류가 안떠서 수동으로 import문을 썻는데import com.google.firebase.ktx.Firebase.database에서 "Unresolved reference: database"라는 오류가 뜨는데 어디서 어떻게 해결해야 하는지 모르겠습니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
Navigation에 관련해서 질문있습니다!
매번 좋은강의 잘 보고 있습니다!개인 프로젝트 하기 전에 강의를 따라 진행하면서는 몰랐는데 프로젝트에 접목하려고 보니 버그를 발견했습니다.하단 bottom layout에서 꿀팁 -> 자취톡으로 이동 후 다른 탭 클릭이 아닌 안드로이드 기기 하단바의 뒤로가기 버튼을 클릭해서 자취톡 -> 꿀팁 으로 이동하게 되면 꿀팁에서 기능을 구현했던 카데고리 클릭, 하단의 홈, 자취톡, 북마크 전부 다 클릭이 전혀 안됩니다...혼자 해결하려고 구글링도 하고 이것저것 해봐도 도저히 방법을 모르겠어서 질문 드립니다!
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
코드를 어디서 구할 수 있는지 궁금합니다.
좋은 강의 해주셔서 감사합니다. 강의를 다 듣고 프로젝트를 만들었는데 처음에 보여준 홈화면 커뮤니티 연동과 마이페이지 같은 기능도 추가하고 싶어서 혹시 완성된 소스코드는 어디서 볼 수 있는지 여쭤볼 수 있을까요?
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
recyclerview 오류
안녕하세요! 저는 현재 리사이클러 뷰 제작을 하고 있습니다.강의와 같이 따라 했는데도 불구하고 꿀팁에서 All을 클릭하면 자꾸 앱이 종료되더라구요.따로 오류 메세지도 안뜹니다.. 이유가 뭘까요?수업에서 제작한 ContentRVAdapter, ContentListActivity, TipFragment 캡쳐본 첨부합니다.도와주세요ㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
storetap에서 다른 사이트로 이동하는 것
마지막 인강부분을 보고 있어요. 웹뷰를 통해 Store tap을 누르면 다른 사이트로 넘어가 이동하는데요.그런데 구글 문서 링크를 넣었더니 앱에서 나와서 이동하더라구요. 어떻게 해야 앱 내에서 이동할까요???
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시글 content text가 안 나옵니다.
현재 강의는 '게시글 삭제 만들기'까지 듣고 코딩했어요. 게시글 삭제와 수정은 되는데 문제는 게시판에서 게시글을 누르면 firebase key값이 나옵니다.왜 content 부분이 안나올까요? (((사진업로드도 잘됩니다. 내용만 안나와요. )))
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
맥북 M1 쓰는데 안드로이드 스튜디오를 까니까 'No Android SDK found'라고 뜹니다. 어떻게 해야 하나요?
맥북 M1 쓰는데 안드로이드 스튜디오를 까니까 'No Android SDK found'라고 뜹니다. 어떻게 해야 하나요?
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 여러개 작성시 댓글이 안보임
선생님 저 질문이있어서 이렇게 문의드립니다.댓글 불러오기강의에서 댓글을 여러개 작성을 하게 되면 사진에 보이는 것처럼 댓글을 새로 작성해도 화면에 보이지 않고있습니다.infinite/endless scroll(무한 스크롤)기능을 추가해야하는지 싶어서 이렇게 문의드립니다.activity_board_inside.xml<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".board.BoardInsideActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/titleArea" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:gravity="center" android:text="title" android:textColor="@color/black" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/boardSettingIcon" android:layout_width="20dp" android:layout_height="40dp" android:layout_margin="10dp" android:src="@drawable/main_menu" android:visibility="invisible" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/black"> </LinearLayout> <TextView android:id="@+id/timeArea" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:gravity="right" android:text="time" /> <TextView android:id="@+id/textArea" android:layout_width="match_parent" android:layout_height="200dp" android:layout_margin="20dp" android:background="@drawable/background_radius" android:padding="10dp" android:text="여기는 내용 영역" android:textColor="@color/black" /> <ImageView android:id="@+id/getImageArea" android:layout_width="match_parent" android:layout_height="300dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" /> <ListView android:id="@+id/commentLV" android:layout_width="match_parent" android:layout_height="600dp" /> </LinearLayout> </ScrollView> <LinearLayout android:layout_width="match_parent" android:layout_alignParentBottom="true" android:background="@color/white" android:layout_height="60dp"> <EditText android:id="@+id/commentArea" android:hint="댓글을 입력해주세요" android:layout_marginLeft="10dp" android:layout_width="320dp" android:layout_height="match_parent" android:background="@android:color/transparent"/> <ImageView android:id="@+id/commentBtn" android:src="@drawable/btnwrite" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> </RelativeLayout> </layout>BoardInsideActivity.ktpackage com.example.mysolelife.board import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil import com.bumptech.glide.Glide import com.example.mysolelife.R import com.example.mysolelife.comment.CommentLVAdapter import com.example.mysolelife.comment.CommentModel import com.example.mysolelife.databinding.ActivityBoardInsideBinding import com.example.mysolelife.utils.FBAuth import com.example.mysolelife.utils.FBRef import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.ValueEventListener import com.google.firebase.ktx.Firebase import com.google.firebase.storage.ktx.storage import java.lang.Exception class BoardInsideActivity : AppCompatActivity() { private val TAG = BoardInsideActivity::class.java.simpleName private lateinit var binding : ActivityBoardInsideBinding private lateinit var key : String private val commentDataList = mutableListOf<CommentModel>() private lateinit var commentAdapter : CommentLVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_board_inside) binding.boardSettingIcon.setOnClickListener { showDialog() } // 첫 번째 방법 /* val title = intent.getStringExtra("title").toString() val content = intent.getStringExtra("content").toString() val time = intent.getStringExtra("time").toString() binding.titleArea.text = title binding.textArea.text = content binding.timeArea.text = time*/ // 두 번째 방법 key = intent.getStringExtra("key").toString() getBoardData(key) getImageData(key) binding.commentBtn.setOnClickListener { insertComment(key) } commentAdapter = CommentLVAdapter(commentDataList) binding.commentLV.adapter = commentAdapter getCommentData(key) } private fun getBoardData(key : String) { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { try { val dataModel = dataSnapshot.getValue(BoardModel::class.java) Log.d(TAG, dataModel!!.title) binding.titleArea.text = dataModel!!.title binding.textArea.text = dataModel!!.content binding.timeArea.text = dataModel!!.time 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("ContentListActivity", "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.child(key).addValueEventListener(postListener) } 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 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 { Toast.makeText(this, "수정 버튼을 눌렀습니다", Toast.LENGTH_LONG).show() val intent = Intent(this, BoardEditActivity::class.java) intent.putExtra("key", key) startActivity(intent) } alertDialog.findViewById<Button>(R.id.removeBtn)?.setOnClickListener { FBRef.boardRef.child(key).removeValue() Toast.makeText(this, "삭제완료", Toast.LENGTH_LONG).show() finish() } } fun insertComment(key : String){ // 파이어베이스 구조 // comment // - BoardKey // - CommentKey // - CommentData // - CommentData // - CommentData FBRef.commentRef .child(key) .push() .setValue( CommentModel( binding.commentArea.text.toString(), FBAuth.getTime() ) ) Toast.makeText(this, "댓글 입력 완료", Toast.LENGTH_SHORT).show() binding.commentArea.setText("") } fun getCommentData(key: String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { commentDataList.clear() for (dataModel in dataSnapshot.children) { 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) } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 불러오기 파트 진행 중인데 앱이 다운되네요 ㅠㅠ
댓글 불러오기 부분 하고 있는데2022-09-18 18:50:08.110 7539-7539/com.example.mysololife E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.example.mysololife, PID: 7539com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.mysololife.comment.CommentModelat com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)at com.example.mysololife.board.BoardInsideActivity$getCommentData$postListener$1.onDataChange(BoardInsideActivity.kt:77)at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)at android.os.Handler.handleCallback(Handler.java:942)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loopOnce(Looper.java:201)at android.os.Looper.loop(Looper.java:288)at android.app.ActivityThread.main(ActivityThread.java:7898)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 이러한 오류 메시지 뜨면서 앱이 죽습니다 코드는 board inside 부분은 package com.example.mysololife.board import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil import com.bumptech.glide.Glide import com.example.mysololife.R import com.example.mysololife.comment.CommentLVAdapter import com.example.mysololife.comment.CommentModel import com.example.mysololife.databinding.ActivityBoardInsideBinding import com.example.mysololife.utils.FBAuth import com.example.mysololife.utils.FBRef import com.google.android.gms.tasks.OnCompleteListener import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.ValueEventListener import com.google.firebase.ktx.Firebase import com.google.firebase.storage.ktx.storage import java.lang.Exception class BoardInsideActivity : AppCompatActivity() { private val commentDataList = mutableListOf<CommentModel>() private lateinit var binding : ActivityBoardInsideBinding private lateinit var key : String private lateinit var commentAdapter : CommentLVAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this,R.layout.activity_board_inside) // val title = intent.getStringExtra("title").toString() // val content = intent.getStringExtra("content").toString() // val time = intent.getStringExtra("time").toString() // binding.titleArea.text = title // binding.textArea.text = content // binding.timeArea.text = time key = intent.getStringExtra("key").toString() getBoardData(key) getImageData(key) binding.boardSetting.setOnClickListener { showDialog() } binding.commentBtn.setOnClickListener { insertComment(key) } getCommentData(key) commentAdapter = CommentLVAdapter(commentDataList) binding.commentLV.adapter = commentAdapter } fun getCommentData(key: String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { commentDataList.clear() for (dataModel in dataSnapshot.children) { 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("TalkFragment", "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() ) ) Toast.makeText(this,"댓글 입력 완료",Toast.LENGTH_LONG).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.findViewById<Button>(R.id.removeBtn)?.setOnClickListener { FBRef.boardRef.child(key).removeValue() Toast.makeText(this,"삭제 완료",Toast.LENGTH_LONG).show() finish() } } private fun getImageData(key:String){ val storageReference = Firebase.storage.reference.child(key) val imageViewFB = binding.getImageArea storageReference.downloadUrl.addOnCompleteListener(OnCompleteListener { task -> if (task.isSuccessful) { Glide.with(this) .load(task.result) .into(imageViewFB) } 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) binding.titleArea.text = dataModel!!.title binding.textArea.text = dataModel!!.content binding.timeArea.text = dataModel!!.time val myUid = FBAuth.getUid() val writeUid = dataModel.uid if (myUid == writeUid){ binding.boardSetting.isVisible = true } else { } } catch (e: Exception){ } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w("TalkFragment", "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.child(key).addValueEventListener(postListener) } } 이렇게 짰습니다 오류메세지가 가르키는 부분이 for (dataModel in dataSnapshot.children) { 이쪽--> val item = dataModel.getValue(CommentModel::class.java) commentDataList.add(item!!) } commentAdapter.notifyDataSetChanged() }이던데 뭐가 문제일까요? 추가로 commentLVAdapter는 package com.example.mysololife.comment import android.graphics.Color import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.LinearLayout import android.widget.TextView import com.example.mysololife.R import com.example.mysololife.utils.FBAuth class CommentLVAdapter(val commentList : MutableList<CommentModel>) : BaseAdapter () { override fun getCount(): Int { return commentList.size } override fun getItem(p0: Int): Any { return commentList[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var view = convertView if (view == null) { view = LayoutInflater.from(parent?.context) .inflate(R.layout.board_list_item, parent, false) } val title = view?.findViewById<TextView>(R.id.titleArea) val time = view?.findViewById<TextView>(R.id.timeArea) title!!.text = commentList[position].commentTitle time!!.text = commentList[position].commentCreatedTime return view!! } }이렇게 모델은 package com.example.mysololife.comment data class CommentModel ( val commentTitle : String = "", val commentCreatedTime : String = "" )이렇게 했습니다