35,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
소스코드의 위치에 대하여
항상 강의 잘 듣고 있습니다. 강의를 듣다가 오류가 발생하면 첨부해 주신 소스코드와 제가 입력한 코드를 비교하고자 하는데, 부끄럽게도 소스코드의 위치를 잘 모르겠습니다. 소스코드의 자세한 위치를 알려주신다면 감사드리겠습니다! 감사합니다!
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
회원가입 시 자꾸 '실패'만 뜹니다.
항상 강의 잘 듣고 있습니다. 회원가입 부분을 구현하는 중, 다 맞게 입력했는데 자꾸 '실패'라고 뜨는 현상을 맞이하여 질문드립니다. authentication에서 이메일/비밀번호까지 수정을 다 했는데, 어떻게 된 건지 궁금합니다. 혹시 강의 자료 중에 소스 코드가 어디에 위치해 있는지 알려주실 수 있으신가요? 다른 오류가 생기면 그걸 먼저 찾아보겠습니다. 아래는 코드입니다. package koreatraveltipsintroimport android.content.ContentValues.TAGimport android.content.Intentimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport android.widget.Toastimport androidx.databinding.DataBindingUtilimport com.example.koreatraveltips.MainActivityimport com.example.koreatraveltips.Rimport com.example.koreatraveltips.databinding.ActivityJoinactivityBindingimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.ktx.authimport com.google.firebase.ktx.Firebaseclass joinactivity : AppCompatActivity() { private lateinit var auth : FirebaseAuth private lateinit var binding : ActivityJoinactivityBinding //이와 관해서 오류가 날 수도 있는데, 당황하지 말고 문제의 원인을 구글링해서 문제를 해결하자.//gradle에 id 'kotlin-android-extensions'을 추가해 주면 된다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_joinactivity) auth= Firebase.auth binding = DataBindingUtil.setContentView(this, R.layout.activity_joinactivity)//해당 레이아웃 파일의 부분의 데이터를 바인딩 하겠다는 코드이다. binding.joining.setOnClickListener {//윗줄의 코드는 '회원가입하기'라는 버튼을 누르면 어떻게 되는지에 대해 구현하는 코드라는 의미이다. //회원 가입 버튼을 클릭을 하면, 위의 정보들을 가져 오겠다는 의미이다. //변수를 하나 만들고, 디폴트 값을 true라고 정한다. //그리고, 아래의 조건들에 걸리면, 값을 false로 바꾸는 것이다. var isTrue = true val email = binding.email.text.toString() val password = binding.password.text.toString() val passwordcheck = binding.passwordcheck1.text.toString() //저기 값이 비어 있는지 확인한다. if(email.isEmpty()) //만약 이메일 값이 비어 있다면 {//아래와 같은 값을 띄운다. Toast.makeText(this,"이메일을 입력해주세요.",Toast.LENGTH_LONG).show() isTrue = false } if(password.isEmpty()) //password가 비어도 마찬가지. { Toast.makeText(this,"password1을 입력하시오.",Toast.LENGTH_LONG).show() isTrue = false } if(passwordcheck.isEmpty()) { Toast.makeText(this,"password2를 입력하시오.",Toast.LENGTH_LONG).show() isTrue = false } //비밀번호가 서로 다르다면 비밀번호를 같게 입력해달라고 메시지를 띄운다. if(!password.equals(passwordcheck)) { Toast.makeText(this,"비밀번호를 똑같이 입력하시오",Toast.LENGTH_LONG).show() isTrue = false } //비밀번호의 길이를 확인 if(password.length < 6) { Toast.makeText(this,"비밀번호를 6자리 이상으로 입력해주세요.",Toast.LENGTH_LONG).show() isTrue = false } //만약 위의 필터링을 모두 통과했다면, 아래의 것들을 실행시켜보자. if(isTrue==true) { auth.createUserWithEmailAndPassword(email, password).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() //회원가입이 성공적으로 끝이 난다면, mainactivity로 이동한다. val intent = Intent(this, MainActivity::class.java) startActivity(intent) //그런데, 이렇게만 코드를 짜면, 뒤로가기로 앱을 끌 경우 //회원가입 페이지가 나와버리는 결과가 발생한다. //그래서 코드를 더 짠다. } else { // If sign in fails, display a message to the user. Toast.makeText(this,"실패",Toast.LENGTH_LONG).show() Log.e(TAG, "createUserWithEmail:failure", task.exception) } } } }아래는 오류 화면 캡쳐입니다. 감사합니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
intro 화면
안녕하세요!! 강의 내용을 쭉 따라했는데 애뮬레이터에서 splash 화면 다음 intro 화면이 뜨지 않습니다. intro 화면이 안 떠서 activity_intro.xml의 코드를 activity_main.xml 화면으로 옮기니까 그제서야 화면이 나오는데 이 상태로 쭉 앱 제작을 진행해도 될까요..?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의 질문이요
이 앱을 만들고 본인이 그 앱에 게시물을 올리면 자기만 볼 수 있게 할 수 있나요?? 몇 개를 올리고 자기가 올린 게시물만 모아볼 수 있게요..
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
프래그먼트 바인딩
똑같이 따라했는데 이런 오류가 생겼어요,, 검색해도 잘 안 나오고 뭐가 문제인지 모르겠습니다ㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의 잘 들었습니다. 강의중 궁금한 사항이 있어 글남깁니다.
1. 레이아웃 정리 나머지 정리 - 1 에서 스토어탭에 가면 StoreFragment에 WebView로 인프런 주소를 넣고 안드로이드 시뮬레이터로 실행해서 스토어 탭을 누르면 강의화면과는 다르게 에뮬레이터의 기본브라우저인 외부 크롬으로 해당 인프런 사이트가 열리더라구요 이건 왜그럴까요? 1.1 위 질문과 같은데 강의에서도 그런건데 꿀팁의 레시피를 누르면 해당 웹뷰에서 실행이 안되고 외부 브라우저에서 실행이 되는데 왜 프로그램 내부에서 안보여질까요? 강의에서도 외부브라우저가 실행이 되는데 그냥 넘어갔네요. 2. 하단 탭을 눌러서 이동하는걸 네비게이션+프래그먼트로 구현하셨는데 프래그먼트에 매번 같은 뷰를 붙이고 같은 클릭 이벤트를 넣어주는게 번거로운데 이걸 개선하는 방법이 있나요? 2-1 그래서 찾아본게 BottomNavigation이 있더라구요 이걸 안쓰고 강의처럼 하는 이유가 있을까요? 2-2 탭이동시 프래그먼트를 매번 만드는게 아니라 한번 만들어진 프래그먼트를 계속 재활용 할 순 없을까요 A탭의 프래그먼트의 리스트를 끝까지 내렸는데 B탭으로 갔다가 다시 A탭으로 가면 A탭의 프래그먼트가 초기화 되는데 초기화 안시킬수 있을까요(프래그먼트 재사용) 2-3 ViewPager2를 사용하는거에 비해서 Navigation으로 구현하는게 장점이 모가 있을까요 인터넷에 찾아봤지만 딱히 원하는 답이 없어 여기다 물어봅니다.ㅠㅠ
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
리사이클러뷰에서 context
context랑 requireContext() 다르게 쓸 때가 있던데 무슨 차이인가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시글 읽기 파트에서 파이어베이스에 등록한 게시물이 나오지 않습니다.
게시글 읽기 파트에서 파이어베이스에 등록한 게시물이 나오지 않습니다. 가상머신 가동 할 때 오류는 없다고 나오며, 자취톡 접근시 바로 앱이 죽어버립니다. 앱이 죽을때2022-06-09 13:49:37.044 208-210/? E/android.system.suspend@1.0-service: Error opening kernel wakelock stats for: wakeup34: Permission denied 라는 오류가 log에 나옵니다 해결방법이 있을까요? 세번째 코드에서 선생님과 다르게 BoardListLVAdapter 가 아닌 BoardListVAdapter으로 이름을 지었습니다 첫번째 이미지 파이어베이스 데이터입니다. 첫번째 코드 BoardModel.kr입니다. 두번째 코드 FBRef.kr입니다. 세번째 코드 TalkFragmant.kr입니다. package com.example.sololife.board data class BoardModel ( val title : String = "", val content : String = "", val uid : String = "", val time : String = "" ) package com.example.sololife.utils import com.google.firebase.database.ktx.database import com.google.firebase.ktx.Firebase class FBRef { companion object { private val database = Firebase.database val category1 = database.getReference("contents") val category2 = database.getReference("contents2") val category3 = database.getReference("contents3") val category4 = database.getReference("contents4") val category5 = database.getReference("contents5") val category6 = database.getReference("contents6") val category7 = database.getReference("contents7") val category8 = database.getReference("contents8") val bookmarkRef = database.getReference("bookmark_list") val boardRef = database.getReference("board") } } package com.example.sololife.fragments import android.content.Intent import android.os.Bundle import android.util.Log import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.navigation.findNavController import com.example.sololife.R import com.example.sololife.board.BoardListVAdapter import com.example.sololife.board.BoardModel import com.example.sololife.board.BoardWriteActivity import com.example.sololife.contentsList.BookmarkRVAdapter import com.example.sololife.contentsList.ContentModel import com.example.sololife.databinding.FragmentTalkBinding import com.example.sololife.utils.FBRef import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError import com.google.firebase.database.ValueEventListener class TalkFragment : Fragment() { private lateinit var binding : FragmentTalkBinding private val boardDataList = mutableListOf<BoardModel>() private val TAG = TalkFragment::class.java.simpleName private lateinit var boardRVAdapter: BoardListVAdapter 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_talk, container, false) /*val boardList = mutableListOf<BoardModel>() boardList.add(BoardModel("a", "b", "c", "d"))*/ boardRVAdapter = BoardListVAdapter(boardDataList) binding.boardListView.adapter = boardRVAdapter binding.writeBtn.setOnClickListener { val intent = Intent(context, BoardWriteActivity::class.java) startActivity(intent) } binding.homeTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment2_to_homeFragment2) } binding.tipTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment2_to_tipFragment2) } binding.bookmarkTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment2_to_bookmarkFragment2) } binding.storeTap.setOnClickListener { it.findNavController().navigate(R.id.action_talkFragment2_to_transactionFragment2) } getFBBoardData() return binding.root } private fun getFBBoardData(){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { for (dataModel in dataSnapshot.children) { Log.d(TAG, dataModel.toString()) val item = dataModel.getValue(BoardModel::class.java) boardDataList.add(item!!) } boardRVAdapter.notifyDataSetChanged() Log.d(TAG, boardDataList.toString()) } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FBRef.boardRef.addValueEventListener(postListener) } }
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
선생님 저 댓글 불러오는 거 오류가 뜨는데 오류 내용을 잘 모르겠어요 ㅠ
E/AndroidRuntime: FATAL EXCEPTION: main Process: org.cream.creamkgt1, PID: 13403 com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type org.cream.creamkgt1.comment.CommentModel at 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 org.cream.creamkgt1.board.BoardInsideActivity$getCommentData$postListener$1.onDataChange(BoardInsideActivity.kt:85) 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:938) 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:7839) 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:1003) 오류가 저렇게 뜨는데 강의 한 3~4번을 봐도 똑같이 작성했는데 어디가 잘못된걸까요? ㅠ 그리고 게시판 작성을 하면 파이어베이스에 적용이 안되네요... 그 전 강의까지는 등록이 잘 됐는데
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
처음 04:35초 메인패스트 부분부터 난관이네요..
MainFast에서 splashActivity 부분에 <intent-filter> 을 넣으니까 오류가 막 엄청뜨네요. 버전도 같은데 코드또한 약간 다릅니다. 강의에 안보이는 <activity 부분에 android:exported="ture" /> 도 저는 보입니다.. ERROR:C:\Users\i\AndroidStudioProjects\MySoloLife2\app\build\intermediates\packaged_manifests\debug\AndroidManifest.xml:25: AAPT: error: unexpected element <intent-filter> found in <manifest><application>. 라고 에러코드는 나와있습니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
홈화면 게시판내용
너무 좋은 강의 잘들어서 잘 완성할 수 있었습니다. 감사합니다. 그 추가로 몇개 더 해볼려고 해서 질문 드립니다. 홈화면에 board로 표현된 부분에 최신 게시물 제목이 나오게 하는 것이랑 위의 아이콘에 다른 내용들도 넣어보려고하는데 어떤 방식으로 구현해야 할까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
webView 문제입니다.
강의 막바지에 add 를 전부 끝낸 후, 에뮬레이터로 tiptap 내에 버튼을 클릭해 크롬으로 블로그 링크가 뜨는 것까진 괜찮은데 이후에 로딩하다 그대로 에뮬레이터가 멈춰버리네요. 단순히 제 컴퓨터 문제일까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
Intent 쪽 질문입니다.
영상에 나온대로 코드를 입력했는데 Handler().postDelayed({ startActivity(Intent(this, IntroActivity::class.java))finish()}, 3000)IntroActivity 쪽으로 넘어가지지 않고 앱이 터져버립니다. 메인 엑티비티 쪽으로 넘어가는 건 문제없이 되는 걸로 봐서, 따로 패키지를 만들어서 넘겨서 그런 것 같은데 해결 방법이 있을까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
북마크 탭 질문
북마크 탭을 누르면 아무것도뜨지 않고 흰 화면만 나옵니다. 코드 메일로 공유해 드렸는데 확인해 주실 수 있을까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
API 공용데이터를 활용해서 제작하는 방법 문의드립니다!
안녕하세요 강사님! 강의 잘 듣고 있습니다,,!컨텐츠 리스트 만들기 - RecyclerView1 파트 강의에서는저희가 임의로 drawable에 이미지를 넣고, 그 이미지를 눌렀을 때, 해당 정보가 나오도록 했는데요,,이를 공용데이터로 받아서 이미지를 눌렀을 때, 해당 정보가 나오도록 하는 방법은 어떻게 하면 좋을까요?우선, postman 구글 확장 프로그램을 통해 API를 xml데이터로 변환하기는 했는데, 이를 어떻게 가져오고 어떻게 뿌리는지 구글링을 해봐도 마땅한 답안이 없네요 ㅠ힌트좀 주시면 감사하겠습니다..!
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
수정완료 후에도 dialog 창이 사라지지 않습니다.
안녕하세요 항상 강의 잘 듣고있습니다. 아래에 질문 주신 다른 분이 계시던데 저도 똑같은 질문입니다. 현재 수정완료 버튼을 누르고 수정이 끝난 후에 alertDialog 화면? 창?이 사라지지 않는 문제가 있습니다. 강사님 영상을 보아도 5분경에 수정완료후 수정 삭제 선택창이 다시 뜨고 있습니다. 빈 공간을 클릭하셔서 그 창을 닫으시네요. 구글링 해보니 alertDialog는 기본적으로 positive 혹은 negative, neutral 버튼등을 클릭하면 자동적으로 close되는 구조라고 합니다. 그래서 메소드 보면 setNeutralButton같은 것들이 있습니다. 강사님 영상같은 경우에는 그런 버튼을 활용한게 아니라서 자동적으로 닫히지 않는것이 아닌가 싶습니다. 이부분 어떻게 해결하면 좋은가요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
현재 시간이 파이어베이스에 저장될때 시간(HH) 부분만 이상하게 넘어옵니다.
게시물 입력 버튼을 누르면 현재 시간(연도.월.일 시간:분:초 )을 파이어베이스 데이터에 저장하는데 나머지는 잘넘어와서 저장되는데 시간 부분이 이상하게 넘어옵니다. 어떻게 해결해야 할지 질문드립니다!! ex) 현재시간 17시 인데 -> 파이어베이스 내에서는 08시로 표현됩니다.
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
컨텐츠 리스트 만들기 앱 실행 질문
강의 기준으로 컨텐츠 리스트 만들기 - RecyclerView 1까지 하고 실행을 할떄는 ALL아이콘을 누르면 컨텐츠리스트로 넘어가는 것 까지 잘 되었는데 컨텐츠 리스트 만들기 - RecyclerView 2이후 강의를 듣고 실행한 이미지 주소넣기를 하고 나서 앱을 실행해 보니 AlLL아이콘을 누르면 앱이종료되고 배경화면으로 이동하는데 어떻게 해야 할까요?
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의를 듣고 응용해봤는데 질문있습니다
강의의 게시판 만들기 부분을 실습하고 나서 게시글 양식으로 만드셨던 board_list_item.xml을 이렇게 변경해봤습니다. 나머지 글들은 강의에서 하던대로 따라해서 불러와지는게 되는데 제가 추가한 저 초록색사진은 글을 작성할때 즉 강의 상의 코드인 BoardWriteActivity.kt에서 사진이 첨부되면 그 첨부된 사진이 저 초록색사진에 같이 업로드 되게끔 만들고 싶습니다. 저 사진의 id값은 preview입니다. <?xml version="1.0" encoding="utf-8"?><ScrollView 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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Sell"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" android:theme="?attr/actionBarTheme" app:titleTextColor="@color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="판매글 작성" android:textSize="23sp" android:textStyle="bold"/> </androidx.appcompat.widget.Toolbar> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <EditText android:id="@+id/et_newtitle" android:layout_width="330dp" android:layout_height="50dp" android:layout_marginLeft="20dp" android:layout_marginTop="70dp" android:gravity="center" android:maxLength="15" /> <EditText android:id="@+id/et_originalname" android:layout_width="330dp" android:layout_height="50dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:gravity="center" android:hint="※주의 : 책 제목 그대로 써주세요 ※" android:maxLength="100" /> <EditText android:id="@+id/et_price" android:layout_width="330dp" android:layout_height="50dp" android:hint="숫자 옆에 원을 붙여주세요" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:gravity="center" android:maxLength="10" /> <ImageView android:id="@+id/imageupload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/baseline_add_black_48dp" android:layout_marginTop="30dp" /> <EditText android:id="@+id/et_newdetail" android:layout_width="334dp" android:layout_height="260dp" android:layout_marginLeft="20dp" android:layout_marginTop="30dp" android:layout_marginBottom="10dp" android:background="@drawable/boxline" android:ems="10" android:gravity="top" android:hint="내용을 입력하세요." android:maxHeight="200dp" android:maxLength="200" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="96dp" android:layout_marginBottom="60dp" android:gravity="center" android:orientation="horizontal" android:paddingTop="30dp"> <Button android:id="@+id/upload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="50dp" android:text="올리기" /> <Button android:id="@+id/cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="취소" /> </LinearLayout> </LinearLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/newtitle" android:layout_width="35dp" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginTop="90dp" android:text="제목" android:textSize="16sp" /> <TextView android:id="@+id/newname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="12dp" android:layout_marginTop="160dp" android:text="상품명" android:textSize="15sp" /> <TextView android:id="@+id/price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="235dp" android:text="판매가격" android:textSize="13sp" /> <TextView android:id="@+id/newpicture" android:layout_width="35dp" android:layout_height="17dp" android:layout_marginLeft="15dp" android:layout_marginTop="300dp" android:text="사진" android:textSize="16sp" /> <TextView android:id="@+id/newdetail" android:layout_width="35dp" android:layout_height="28dp" android:layout_marginLeft="15dp" android:layout_marginTop="370dp" android:text="내용" android:textSize="16sp" /> </FrameLayout> </FrameLayout></ScrollView> package com.example.joonggo2import android.content.Intentimport android.graphics.Bitmapimport android.graphics.drawable.BitmapDrawableimport android.net.Uriimport android.os.Bundleimport android.provider.MediaStoreimport android.util.Logimport android.widget.Buttonimport android.widget.Toastimport androidx.appcompat.app.AppCompatActivityimport com.bumptech.glide.Glideimport com.example.joonggo2.databinding.ActivityBoardInsideBindingimport com.example.joonggo2.databinding.ActivityMainBindingimport com.example.joonggo2.databinding.ActivityMifBindingimport com.example.joonggo2.databinding.ActivitySellBindingimport com.google.firebase.ktx.Firebaseimport com.google.firebase.storage.ktx.storageimport java.io.ByteArrayOutputStreamclass Sell : AppCompatActivity() { private lateinit var binding: ActivitySellBinding private val TAG = Sell::class.java.simpleName val storage = Firebase.storage private var isImageUpload = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySellBinding.inflate(layoutInflater) setContentView(binding.root) binding.upload.setOnClickListener{ val title = binding.etNewtitle.text.toString() val originalname = binding.etOriginalname.text.toString() val price = binding.etPrice.text.toString() val content = binding.etNewdetail.text.toString() val uid = FBAuth.getUid() val time = FBAuth.getTime() Log.d(TAG, title) Log.d(TAG, content) val key = FBRef.writein.push().key.toString() FBRef.writein .child(key) .setValue(BoardModel(title, originalname, price, content, uid, time)) Toast.makeText(this,"게시물이 업로드 되었습니다.", Toast.LENGTH_LONG).show() if(isImageUpload == true) { imageUpload(key) } val intent = Intent(this, AfterLoginmain::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) } binding.cancel.setOnClickListener { val intent = Intent(this, AfterLoginmain::class.java) intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) startActivity(intent) } binding.imageupload.setOnClickListener { val gallery = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI) startActivityForResult(gallery, 100) isImageUpload = true } } private fun imageUpload(key : String) {// Get the data from an ImageView as bytes val storageRef = storage.reference val mountainsRef = storageRef.child(key + ".png") val imageView = binding.imageupload imageView.isDrawingCacheEnabled = true imageView.buildDrawingCache() val bitmap = (imageView.drawable as BitmapDrawable).bitmap val baos = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos) val data = baos.toByteArray() var uploadTask = mountainsRef.putBytes(data) uploadTask.addOnFailureListener { // Handle unsuccessful uploads }.addOnSuccessListener { taskSnapshot -> // taskSnapshot.metadata contains file metadata such as size, content-type, etc. // ... } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(resultCode == RESULT_OK && requestCode == 100) { binding.imageupload.setImageURI(data?.data) } }} 위 사진두개는 강의에서 하신 BoardWriteActivity.kt와 역할이 같은 xml과 kt파일입니다. 지금 이 코드에서 글과 갤러리에서 사진을 첨부하는 기능은 모두 구현되어있습니다. 그런데 사진도 메인화면에 뜨게끔 하려니 너무 막막해서 질문드립니다...
- 미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
게시판 만들기에서 게시글 ListView만들기 에서 발생한 문제 질문드립니다.
강의를 보며 개발자님과 똑같이 하지 않고 저에게 필요한 부분들을 제 스타일대로 바꾸면서 듣고 있습니다. 잘 되다 이번에 문제가 생겼습니다. 현재 레이아웃이 겹칩니다.. 어느 부분의 코드를 보여드리야할까요.. 추가적으로 어떤 걸 말씀드려야하는지 알려주시면 더 자세하게 질문하겠습니다. 도와주세요