35,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
개복치개발자님 부탁드립니다!!
ListView로 게시글 만들고 읽고 보는 강의까지 전부 보고 실습해봤는데 강의가 정말 좋으셔서 잘 따라갈수 있었던것 같습니다. 그래서 정말 저한테 많은 도움이 되었습니다. 정말 감사합니다. 근데 혹시 ListView말고 RecyclerView로 만드신 게시글 만들고 읽고쓰게하는 강의는 만드실 생각이 없으신가요? RecyclerView가 더 안정적이고 좋다는 평이 많은데 확실히 ListView보다는 난이도가 어려워보입니다... 혹시 강의 가능하시다면 부탁드립니다!!
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
회원가입 로직 구현, Firebase 세팅에서 발생하는 오류입니다.
회원가입 로직 구현, Firebase 회원가입 구현을 하던 중 오류가 발생해 처음부터 하나씩 진행하면서 오류가 발생한 부분을 찾았는데 영상 3:36 정도에 앱 수준의 gradle에서 마지막 코드 implementation 'com.google.firebase:firebase-analytics-ktx' 이 코드를 앱 수준의 그래들에 작성하고 실행하니 다음과 같은 오류가 발생했습니다.. 도와주세요
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
회원가입,로그인 페이지 -Android에서 Facebook 로그인을 사용하여 인증하기
선생님의 영상을 따라하는 도중에 파이어베이스 문서에서 기존 회원가입을 통한 인증하기가 아닌 구글 또는 페이스북을 이용해 인증하는 방법도 있던데 혹시 그 방법으로 인증하는 영상또는 방법을 자세하게 알려주실수 있나요??
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
파이어베이스에 있는 데이터베이스가 안불려와져요
- 강의를 들으면서 파이어베이스에서 데이터베이스를 불러오는 작업을 하던도중에 로그캣으로 데이터가 불려와지는지 확인하시는 과정이 있으셔서 똑같이 했더니 저는 데이터가 아예 불려와지지를 않습니다 파이어베이스안에 데이터베이스는 버젓이 있는데도 불구하고 안불려와지는 이유가 뭘까요... 듣고 있던 강의 : 예제 앱 만들기 - 4(데이터베이스에서 데이터 받아오기)
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
댓글 리스트뷰 관련 질문드립니다 !
위 사진은 match_parent로 설정 시 ㅡㅡㅡ 위 사진은 600dp로 고정 시 나오는 댓글 리스트뷰입니다 ㅡㅡㅡ 사진엔 안보이지만 댓글이 총 7개인 상황입니다 listview의 높이를 matchparent로 설정하면 저 좁은 공간 내에서 스크롤은 되어 댓글이 7개까지 보이는데요 첫번째 사진처럼 높이가 리스트아이템의 한개의 높이만큼만 잡히네요 아마 강의에서는 600dp로 고정했던걸로 기억하는데 600dp로 고정하면 두번째 사진처럼 댓글 5개부터는 잘려서 그 밑으로는 스크롤이 아예 되지않습니다 db에는 정상적으로 추가됩니다 댓글이 많은 상태일때 화면을 스크롤하면 '제목' 부분 LinearLayout을 제외하고 전체가 다 위로 밀려올라가도록 하고싶은데 어떻게 해야 할까요? 스크롤뷰를 여기저기 옮겨보고 높이도 이것저것 바꿔봤는데도 안돼서 질문드려요 코드 링크해두겠습니다 ! https://github.com/minho116/solo
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시글 삭제시 에러 문의드립니다
안녕하세요 선생님, 잦은 질문 죄송합니다ㅠㅠ 현재 안드로이드 코틀린 커뮤니티앱 강의 중 게시글 삭제 만들기까지 진행한 상황입니다. 게시글 삭제를 클릭해도 화면과 파이어베이스에 해당 글이 그대로 남아있는 문제가 발생해 질문드립니다(앱이 죽지는 않고, 로그에 에러 메시지도 찍히지 않습니다). https://github.com/shinyelee/my-solo-life 혹시몰라 리얼타임DB, 스토리지 규칙도 캡처했습니다.
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시글 이미지가 파이어베이스에 저장되지 않습니다
안녕하세요 선생님, 이미지를 파이어베이스에 저장하는 과정에 문제가 생겨 문의드립니다. '안드로이드 코틀린 커뮤니티앱' 강의에서 '게시글 이미지 파이어베이스에 저장' 강의를 듣고 있는데요. 아래 화면과 같이 이미지 첨부가 정상적으로 되는 듯 보이나 스토리지를 확인하면 아무런 변화가 없습니다(오류 확인을 위해 파일 업로드 버튼으로 수동으로 올린 이미지만 올라가 있는 상태) 해당 강의 0:29초 부근에서 제 화면이 강사님 화면과 다르게 프로덕션/테스트 모드를 선택하는 부분이 있었는데, 아마 여기서 프로덕션 모드인 상태로 다음으로 넘어간 게 문제인 것 같습니다. 수습하려고 보니 기본 버킷은 삭제가 안 되고 추가 버킷은 유료요금제로 전환해야 하는데, 이렇게 되면 아예 파이어베이스 프로젝트를 삭제하는 것 외에 방법이 없는 건가요? 사진 첨부는 포기하고 넘어갈지, 파이어베이스 프로젝트를 싹 밀고 똑같은 이름으로 다시 만들지 판단이 안 서 질문드립니다. 전체 코드는 아래 깃허브에 업로드 해 놓았습니다. https://github.com/shinyelee/my-solo-life
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
안녕하세요
안녕하세요 지금 게시글 이미지 파이어베이스에 저장 부분 강의를 수강중입니다. 게시글 작성을 누르고 갤러리에서 사진을 불러와 작성을 완료하면 파이어베이스 Real time database에는 게시글이 저장이 되는데 Storage에는 선생님처럼 사진파일도 같이 저장되어있어야하는데 아무것도 저장이 안됩니다 ㅠㅠ 사진과 같이 윤경서입니다로 제목을하고 사진도 갤러리에서 선택하여 첨부해서 작성을 했는데 Storage에 아무것도 안뜹니다 ㅠㅠ 코드는 어디부분을 넣어야할지몰라서 일단 안되는 현상만 말씀드립니다 ㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
14:42 초 에서 rv 질문...
안녕하세요 강사님 16번째줄 val rv : RecyclerView = findViewById(R.id.rv) 에서 rv가 빨간색으로 임포트 되지 않습니다. 나머지 모두 다 같게 했는데도요.. 계속 살펴봐도 해결이 안돼서 질문남깁니다. rv가 어디에 있는 객체 인가요?? 아니면 제가 네비게이션 강좌 마지막꺼를 넘기긴 했습니다.. 이부분에 있던것인가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
맥기준 옵션 +b 가 윈도우 기준에서는 무엇인가요?
맥기준 옵션 +b 가 윈도우 기준에서는 무엇인가요? layout으로 바로 넘어가는 단축키 궁금합니다. 알트 +b를 누르니 빌드가 눌러집니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
nav구현중에 frament_home이 기본이 아니라 fragment_bookmark가 첫화면
nav구현중에 frament_home이 기본이 아니라 fragment_bookmark가 첫화면입니다. 어느부분을 봐야할까요? main_nav.xml <fragment android:id="@+id/homeFragment" android:name="com.bokchi.mysolelife.fragments.HomeFragment" android:label="fragment_home" tools:layout="@layout/fragment_home" > <action android:id="@+id/action_homeFragment_to_bookmarkFragment" app:destination="@id/bookmarkFragment" /> <action android:id="@+id/action_homeFragment_to_storeFragment" app:destination="@id/storeFragment" /> <action android:id="@+id/action_homeFragment_to_talkFragment" app:destination="@id/talkFragment" /> <action android:id="@+id/action_homeFragment_to_tipFragment" app:destination="@id/tipFragment" /></fragment><fragment android:id="@+id/bookmarkFragment" android:name="com.bokchi.mysolelife.fragments.BookmarkFragment" android:label="fragment_bookmark" tools:layout="@layout/fragment_bookmark" /><fragment android:id="@+id/storeFragment" android:name="com.bokchi.mysolelife.fragments.StoreFragment" android:label="fragment_store" tools:layout="@layout/fragment_store" /><fragment android:id="@+id/talkFragment" android:name="com.bokchi.mysolelife.fragments.TalkFragment" android:label="fragment_talk" tools:layout="@layout/fragment_talk" /><fragment android:id="@+id/tipFragment" android:name="com.bokchi.mysolelife.fragments.TipFragment" android:label="fragment_tip" tools:layout="@layout/fragment_tip" /> 입니다. 더 필요한 파일이있다면 답변부탁드립니다.
- 해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
bookmark탭 에러 질문드립니다
안녕하세요 선생님, 질문드립니다. 현재 초급편 북마크탭만들기까지 완료하고 게시판만들기로 막 넘어간 상황입니다. 앱을 처음 실행할 때는 북마크 페이지가 정상적으로 작동하는데 홈, 꿀팁 등 다른 탭을 들어갔다 나온 후 다시 북마크 탭으로 돌아가면 아래처럼 빈 화면이 됩니다. 제가 뭔가 실수를 한 것 같은데, 따로 에러가 뜨지 않아 어떤 코드가 문제인지 알 수가 없어 깃허브 전체 코드 첨부드립니다. https://github.com/shinyelee/my-solo-life
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
Intent 사용 시 context관련 질문입니다
안녕하세요 본 강의 15분 55초쯤에서 intent를 선언하는데 this는 작동하지 않고 context라고 입력해야 제대로 작동하는 것을 보았는데요. 지금까지 연습할때도 그렇고 다른 Activity에서도 그렇고 항상 this로 잘 사용을 했었는데 여기서는 context를 입력해야 되는 이유가 무엇인가요? this를 쓰는 것과 context를 쓰는것의 차이를 알고싶습니다!
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
북마크 탭에서 삭제기능을 추가하려고합니다
북마크 탭에서 삭제기능을 추가하려고합니다 삭제기능을 추가해 북마크 아이콘을 누르면 삭제된 콘텐츠빼고 새롭게 다시북마크 탭에 드가게되는데 이거를 처음 북마크상태가 남아있어 계쏙 계쏙 쌓이게 됩니다 기존의 레이아웃에 계쏙 초기화시키는 방법밖에 없을까요?.. BookmarkFragment.kt ``` package com.example.communityapp.fragmentsimport android.os.Bundleimport android.util.Logimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport androidx.databinding.DataBindingUtilimport androidx.navigation.findNavControllerimport androidx.recyclerview.widget.GridLayoutManagerimport androidx.recyclerview.widget.RecyclerViewimport com.example.communityapp.Rimport com.example.communityapp.contentlist.BookmarkRVAdapterimport com.example.communityapp.contentlist.ContentModelimport com.example.communityapp.databinding.FragmentBookmarkBindingimport com.example.communityapp.utills.FBRefimport com.example.communityapp.utills.FBauthimport com.google.firebase.database.DataSnapshotimport com.google.firebase.database.DatabaseErrorimport com.google.firebase.database.ValueEventListener// TODO: Rename parameter arguments, choose names that matchclass BookmarkFragment : Fragment() { private lateinit var binding: FragmentBookmarkBinding lateinit var rvAdapter: BookmarkRVAdapter val bookmarkIdList = mutableListOf<String>() val items = ArrayList<ContentModel>() val itemKeyList = ArrayList<String>() private val TAG = BookmarkFragment::class.java.simpleName override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_bookmark, container, false) //2 getBookmarkData() //3 rvAdapter = BookmarkRVAdapter(requireContext(), items, itemKeyList, bookmarkIdList) val rv: RecyclerView = binding.bookmarkRV rv.adapter = rvAdapter rv.layoutManager = GridLayoutManager(requireContext(), 2) binding.hometap.setOnClickListener { it.findNavController().navigate(R.id.action_bookmarkFragment_to_homeFragment) } binding.tiptap.setOnClickListener { it.findNavController().navigate(R.id.action_bookmarkFragment_to_tipFragment) } binding.storetap.setOnClickListener { it.findNavController().navigate(R.id.action_bookmarkFragment_to_storeFragment) } binding.talktap.setOnClickListener { it.findNavController().navigate(R.id.action_bookmarkFragment_to_talkFragment) } return binding.root } private fun getCategoryData() { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { for (dataModel in dataSnapshot.children) { Log.d(TAG, dataModel.toString()) val item = dataModel.getValue(ContentModel::class.java) if (bookmarkIdList.contains(dataModel.key.toString())) { items.add(item!!) itemKeyList.add(dataModel.key.toString()) } } rvAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException()) } } FBRef.category1.addValueEventListener(postListener) FBRef.category2.addValueEventListener(postListener) FBRef.category3.addValueEventListener(postListener) FBRef.category4.addValueEventListener(postListener) FBRef.category5.addValueEventListener(postListener) FBRef.category6.addValueEventListener(postListener) FBRef.category7.addValueEventListener(postListener) FBRef.category8.addValueEventListener(postListener) } private fun getBookmarkData() { val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { bookmarkIdList.clear() for (dataModel in dataSnapshot.children) { bookmarkIdList.add(dataModel.key.toString()) }//1 rvAdapter.notifyDataSetChanged() getCategoryData() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w("ContentListActivity", "loadPost:onCancelled", databaseError.toException()) } } FBRef.bookmarkRef.child(FBauth.getUid()).addValueEventListener(postListener) }}```BookMarkRVAdapter.kt``` package com.example.communityapp.contentlistimport android.content.Contextimport android.content.Intentimport android.util.Logimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.ImageViewimport android.widget.TextViewimport android.widget.Toastimport androidx.recyclerview.widget.RecyclerViewimport com.bumptech.glide.Glideimport com.example.communityapp.Rimport com.example.communityapp.utills.FBRefimport com.example.communityapp.utills.FBauthclass BookmarkRVAdapter(val context: Context,val items: ArrayList<ContentModel>,val keyList:ArrayList<String>,val bookmarkIdList:MutableList<String>) : RecyclerView.Adapter<BookmarkRVAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookmarkRVAdapter.ViewHolder { val v = LayoutInflater.from(parent.context).inflate(R.layout.content_rv_item, parent, false) return ViewHolder(v) } override fun onBindViewHolder(holder: BookmarkRVAdapter.ViewHolder, position: Int) { holder.bindItem(items[position],keyList[position]) } override fun getItemCount(): Int { return items.size } inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bindItem(item: ContentModel,key:String) { itemView.setOnClickListener { Toast.makeText(context, item.title, Toast.LENGTH_SHORT).show() val intent = Intent(context, ContentshowActivity::class.java) intent.putExtra("url", item.webUrl) itemView.context.startActivity(intent) } val contentTitle = itemView.findViewById<TextView>(R.id.textArea) val imageViewArea = itemView.findViewById<ImageView>(R.id.imageArea) val bookmarkArea=itemView.findViewById<ImageView>(R.id.bookmarkArea) bookmarkArea.setImageResource(R.drawable.bookmark_color) bookmarkArea.setOnClickListener{ Toast.makeText(context, key, Toast.LENGTH_SHORT) Log.d("BookmarkRVAdapter", FBauth.getUid()) FBRef.bookmarkRef .child(FBauth.getUid()) .child(key) .removeValue() notifyDataSetChanged() } contentTitle.text = item.title Glide.with(context) .load(item.imageUrl) .into(imageViewArea) } }}``` 자신이 북마크한 콘텐츠를 다시 bookmarkFragment 에서 삭제하려고할때 bookmarkIdlist 에서는 원활하게 삭제되는데 화면상으로 레이아웃에서 기존에 bookmarkIdlist 가 남아있는데 화면상에서 기존에있는 bookmarkIdlist를 어떻게 삭제해야할까요 ?...ㅠㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
프래그먼트 말고 뷰페이저2로 해도 괜찮은가요? 그리고 뚜껑 저렇게 말고 탭 레이아웃으로 하면 될까요?
안녕하세요 궁금한게 있어서 질문 드립니다! 탭에 프래그먼트로 적용했는데 뷰페이저2를 만들고 탭을 만들어서 적용 해도 괜찮을까요 프래그 먼트는 클릭으로 화면 전환 뷰페이저2는 화면을 슬라이스해서 화면 전환 이런 차이로 알고있는데 맞을까요? 그리고 차이가 이거 말고 더 있을까요? 마지막으로 뚜껑을 저렇게 말고 탭 레이아웃을 만들고 적용하면 될까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
안녕하세요 개발자님 리사이클러뷰에 대해서 에러가 납니다ㅠㅠ
안녕하세요 개발자님 현재 리사이클러뷰를 공부하고 있는데 W/RecyclerView: No adapter attached; skipping layout 이런 애러가 뜹니다..ㅠㅠ 레이아웃에 layoutManager설정도 해줬고 코드에도 따로 설정을 해줬습니다..근데 계속해서 어뎁터가 연결이 안됬다고 뜹니다ㅠㅠㅠ 이거 어떻게 해결 하나요..,..?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
오류질문드립니다
현재 메인화면 레이아웃 꾸미기 챕터 보고있습니다. tipTap을 눌러서 Clicke 표시가 안나는 그부분 오류인데 저는 실제 공기계로 실행을하는데 표시도안나고 Log하신부분에 Vervose에 tipTap 을 눌렀다고 나오는 로그도 안보입니다.. package com.fragmentsimport android.os.Bundleimport android.util.Logimport androidx.fragment.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.Toastimport androidx.databinding.DataBindingUtilimport com.example.mysololife.Rimport com.example.mysololife.databinding.FragmentBookmarkBinding// TODO: Rename parameter arguments, choose names that match// the fragment initialization parameters, e.g. ARG_ITEM_NUMBERprivate const val ARG_PARAM1 = "param1"private const val ARG_PARAM2 = "param2"/** * A simple [Fragment] subclass. * Use the [HomeFragment.newInstance] factory method to * create an instance of this fragment. */class HomeFragment : Fragment() { private lateinit var binding: FragmentBookmarkBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { Log.d("HomeFragment", "onCreateView") binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false) // Inflate the layout for this fragment binding.tipTap.setOnClickListener { Log.d("HomeFragment", "tipTap") Toast.makeText(context, "Clicked", Toast.LENGTH_LONG).show() } return binding.root }} 홈 프래그먼트 코드이구요 (윗부분 쪽)private lateinit var binding: FragmentBookmarkBinding 저는 이상하게 앱에 홈프래그먼트가 메인이 아닌 북마크프래그먼트가 메인이 되서 바인딩을 북마크프래그먼트로했습니다. 어떤게 잘못된건지 모르겠습니다.. 잘하고 따라가고 있었는데 ㅠㅠ 오류는 뜨긴하는데 추가로 .. ㅇ이게 Main_navi 화면인데 Component Tree 보시면 bookmark가 맨위에있는데 선생님께서는 home이 맨위에 가있으신데 이거 떄문에 저는 북마크가 제일 메인으로 되어있는걸까요..? ㅠㅠ 그렇다면 저거 순서는 어떻게 바꾸는지 알려주실수있을까요 main_navi부터 먼가 잘못된거같습니다..
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
다음 강좌 오픈 일정에 대해 여쭤보려고 질문남깁니다!
우선 정말 좋은 강좌 찍어주셔서 감사드립니다! 실제로 많이 이용하는 기능들을 어떤식으로 구현하는 것인지 알려주시니 이 정도로 도움이 많이 되는 강좌는 처음들어봐요 ㅎㅎ 제가 궁금한 것은 안드로이드 Jetpack과 디자인 패턴, 최신 기술 살펴보기 강좌가 제작 예정이라고 되어있는데 앱을 조금이나마 유지보수가 편리하게 만들려면 AAC와 디자인 패턴을 잘 알아야 할 것같아서 강좌를 찾던 중에 개복치 개발자님의 강좌가 제작 예정이라고 되어있어 현재 기다리고 있는데 혹시 언제쯤 제작하여 오픈하실 계획인지 대강이라도 알려주시면 그동안 혼자 공부하다가 바로 수강하고싶어요 ㅠㅠ AAC가 대강 어떤거고 어떻게 쓰는거다 라는 것 정도만 알고 있다보니 제대로 사용하고 있는것인지도 모르겠고 해서 제대로 배워보고싶습니다! 빠른 시일내에 해당 강좌를 듣고싶어요!! 바쁘시겠지만 개발자님의 강좌를 기다리고있는 사람이 있다는 것을 알아주셨으면합니다 ㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
gridview 사용할 때 사이 간격들을 조정하는 방법이 있을까요?
제가 만드는 도중 gridlayoutmanager를 이용해서 spancount를 2를 주고 만드니 아이템과 아이템 사이의 간격 조절이 안되어서 질문 드립니다. margin으로 조절이 잘 안되어 혹시 이런 경우 간격 조절하는 방법이 따로 있을까요? 감사합니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
커스텀 다이얼로그를 fragment에 띄우는 방법이 있을까요?
다이얼로그를 activity에서 띄우는 방법은 이 강의에 있는 것을 따라하면 잘 작동이 되는것을 확인했습니다. 그렇다면 fragment에서 다이얼로그를 띄우는 방법이 있을까요? 그대로 했을 경우 작동이 잘 되지 않아 질문 드립니다