무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결하울의 안드로이드 인스타그램 클론 만들기
firebase와 연동이 느린현상
좋아요 버튼을 누르거나 사진을 업로드 했을때 반응이 많이 느린것 같은데 firebase 문제일까요?
- 미해결하울의 안드로이드 인스타그램 클론 만들기
firestore 업데이트로 변경...
진행을 못하겠는데 혹시 추가설명 가능하신가요 ..ㅠㅠ
- 미해결하울의 안드로이드 인스타그램 클론 만들기
Manifest.permission 에서 permission Unresolved reference 라고 나옵니다..
R.id.action_add_photo ->{ if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ startActivity(Intent(this,AddPhotoActivity::class.java)) } return true }
- 미해결하울의 안드로이드 인스타그램 클론 만들기
AddPhotoActivity.kt 에서 오류가 납니다.
class AddPhotoActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_photo) } } activity_add_photo.xml 이 있는데 계속 unresolved 에러가 뜨네요...
- 미해결하울의 안드로이드 인스타그램 클론 만들기
firebase사이트에서 데이터베이스 화면이 다르게 나옵니다.
화면이 저는 이런식으로 나오는데 어떻게 해야하나요?
- 미해결하울의 안드로이드 인스타그램 클론 만들기
유저 페이지 만들기#3 requestFollow 함수 부분
followDTO 객체가 null인경우 객체만 생성해주면 되지 않을까요? 카운트 증감 및 followers 맵의 값을 바꾸는건 그 다음 조건문에서도 하니까 코드의 중복이 아닐까 생각됩니다.
- 미해결하울의 안드로이드 인스타그램 클론 만들기
Cannot fit requested classes in a single dex file (# methods: 105461 > 65536)와 같은 에러가 나는 경우 참고
컨텐츠 데이터 모델차시에서 발생할 수 있는 에러입니다. 아마도 firebase 관련 dependencies가 많아지기 때문에 발생하는 것으로 생각됩니다.(이 에러는 앱에서 참고하는 메서드의 개수가 65536개가 넘는 경우 발생합니다.) 앱이 Androidx 환경에서 작동하는 경우, 이를 해결하기 위해서는 https://stackoverflow.com/questions/48249633/errorcannot-fit-requested-classes-in-a-single-dex-file-try-supplying-a-main-dex 에서 gsm이 작성한 For Androidx Users,로 시작하는 부분을 참고하시면 됩니다. 추가되는 건 build.gradle(Module: app)에서 minifyEnabled false와 implementation 'androidx.multidex:multidex:2.0.1'입니다. 하울님의 howlstagram github에 업로드된 자료에도 위 부분이 추가 되어있습니다. 예시) apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'apply plugin: 'com.google.gms.google-services'android { compileSdkVersion 28 defaultConfig { applicationId "com.example.howlstagram_f16" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" buildToolsVersion "28.0.3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }}dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.google.firebase:firebase-auth:16.1.0' implementation 'com.google.firebase:firebase-storage:16.0.5' implementation 'com.google.firebase:firebase-firestore:18.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' implementation 'com.google.android.material:material:1.0.0' implementation 'com.google.android.gms:play-services-auth:16.0.1' implementation 'com.android.support:design:28.0.0' implementation 'androidx.multidex:multidex:2.0.1'}
- 미해결하울의 안드로이드 인스타그램 클론 만들기
moveMainPage(task.result.user)에서 에러
moveMainPage(task.result.user) 에서 result와 user 사이에 . 에서 빨간물결이 표시 됩니다에러메세지는 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type AuthResult?입니다메세지대로 .을 ?.로도 !!.로도 바꾸어봤지만 에러메세지만 사라질 뿐 에뮬레이터 실행 시 로그인이 되지 않습니다 아래 moveMainPage의 함수 부분은 fun moveMainPage(user: FirebaseUser?) 로 돼 있습니다 어디가 문제일까요..
- 미해결하울의 안드로이드 인스타그램 클론 만들기
PHOTO UPLOAD 버튼을 눌러도 반응이 없습니다.
파이어베이스 스토리지에 업로드가 안되는걸로 봐선 사진 업로드 버튼을 눌러도 작동하지 않는것 같습니다. 혹시 사진이 업로드 되는데 시간이 오래 걸리는지요. 작성한 코드는 맞는 것 같은데 반응이 없네요. class AddPhotoActivity : AppCompatActivity() { var PICK_IMAGE_FROM_ALBUM = 0 var storage : FirebaseStorage? = null var photoUri : Uri? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_add_photo) storage = FirebaseStorage.getInstance() var photoPickerIntent = Intent(Intent.ACTION_PICK) photoPickerIntent.type = "image/*" startActivityForResult(photoPickerIntent,PICK_IMAGE_FROM_ALBUM) addphoto_btn_upload.setOnClickListener{ contentUpload() } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode == PICK_IMAGE_FROM_ALBUM){ if(resultCode == Activity.RESULT_OK){ //This is path to the selected image photoUri = data?.data addphoto_image.setImageURI(photoUri) }else{ //Exit the addPhotoActivity if you leave the album without selecting it finish() } } } fun contentUpload(){ var timestamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date()) var imageFileName = "IMAGE_" + timestamp + "_.png" var storageRef = storage?.reference?.child("images")?.child(imageFileName) //FileUpload storageRef?.putFile(photoUri!!)?.addOnSuccessListener { Toast.makeText(this, getString(R.string.upload_success), Toast.LENGTH_LONG).show() } }}
- 해결됨하울의 안드로이드 인스타그램 클론 만들기
구글 로그인에서 런타임 오류가 발생합니다.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode == GOOGLE_LOGIN_CODE) { //구글에서 넘겨주는 로그인 결과값 받아오기 var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data) if(result.isSuccess) { //로그인 성공 시 //이 값을 파이어베이스에 넘길수 있도록 만들어 주기 var account = result.signInAccount //second step firebaseAuthWithGoogle(account) } else { Toast.makeText(this, "로그인 실패", Toast.LENGTH_LONG).show() } }}위의 함수에서 토스트메시지로 로그인 결과값을 받아오는 것이 정상 작동 하는 것까지는 확인하였으나 계속하여 로그인 실패가 발생합니다.logcat 확인 결과는 다음과 같습니다.E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@8378379혹시 몰라 전체 코드 첨부합니다.package com.example.instagram import android.content.Intentimport android.os.Bundleimport android.widget.Toastimport androidx.appcompat.app.AppCompatActivityimport com.google.android.gms.auth.api.Authimport com.google.android.gms.auth.api.signin.GoogleSignInimport com.google.android.gms.auth.api.signin.GoogleSignInAccountimport com.google.android.gms.auth.api.signin.GoogleSignInClientimport com.google.android.gms.auth.api.signin.GoogleSignInOptionsimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.FirebaseUserimport com.google.firebase.auth.GoogleAuthProviderimport kotlinx.android.synthetic.main.activity_login.*class LoginActivity : AppCompatActivity() { var auth: FirebaseAuth? = null var googleSignInClient : GoogleSignInClient? = null var GOOGLE_LOGIN_CODE = 9001 //구글 로그인 시 사용할 리퀘스트 값 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) email_login_button.setOnClickListener { signinAndSignup() } google_sign_in_button.setOnClickListener { //google login first step googleLogin() } //구글 로그인 옵션 만들기 var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) // 구글 API 키 .requestEmail() // email id 받아오기 .build() // build로 닫아줍니다 googleSignInClient = GoogleSignIn.getClient(this, gso) //firebase 로그인 통합 관리하는 객체 만들기 auth = FirebaseAuth.getInstance() } fun googleLogin() { var signInIntent = googleSignInClient?.signInIntent startActivityForResult(signInIntent, GOOGLE_LOGIN_CODE) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if(requestCode == GOOGLE_LOGIN_CODE) { //구글에서 넘겨주는 로그인 결과값 받아오기 var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data) if(result.isSuccess) { //로그인 성공 시 //이 값을 파이어베이스에 넘길수 있도록 만들어 주기 var account = result.signInAccount //second step firebaseAuthWithGoogle(account) } else { Toast.makeText(this, "로그인 실패", Toast.LENGTH_LONG).show() } } } //구글 로그인 성공시 토큰값을 파이어베이스로 넘겨주어서 계정을 생성하는 코드 fun firebaseAuthWithGoogle(account : GoogleSignInAccount?) { //account 안에 있는 token id를 넘겨주기 var credential = GoogleAuthProvider.getCredential(account?.idToken, null) auth?.signInWithCredential(credential) ?.addOnCompleteListener { task -> if (task.isSuccessful) { //로그인 성공(id, pw 일치) moveMainPage(task.result?.user) } else { //로그인 실패 Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() } } } fun signinAndSignup() { auth?.createUserWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString()) ?.addOnCompleteListener { task -> if (task.isSuccessful) { //아이디 생성 성공 시 moveMainPage(task.result?.user) } else { //이미 계정이 있는 경우 signinEmail() } } } //로그인 함수 fun signinEmail() { auth?.signInWithEmailAndPassword(email_edittext.text.toString(), password_edittext.text.toString()) ?.addOnCompleteListener { task -> if (task.isSuccessful) { //로그인 성공(id, pw 일치) moveMainPage(task.result?.user) } else { //로그인 실패 Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show() } } } //로그인 성공 시 다음 페이지로 넘어가는 함수 fun moveMainPage(user: FirebaseUser?) { //firebaseUser상태를 넘겨줌 if(user != null) {//user가 있을 경우 startActivity(Intent(this,MainActivity::class.java)) } }}
- 미해결하울의 안드로이드 인스타그램 클론 만들기
Glide부분에서 nullpointexception이 발생합니다
getprofileImage()에서의 Glide부분에서 nullpointexcption이 발생합니다. 기기에서는 프로필 사진을 올리면 앱이 팅기고 다시 앱을 실행하면 프로필이 바뀌어 있네요 ㅠㅜ 아 그리고 자기 프로필에 들어가면" signout"버튼이 없고 "follow"버튼이 있네요 ㅜㅜ string은 제대로 넣었습니다! 이 버튼을 누르면 정상적으로 signout은 되구요
- 미해결하울의 안드로이드 인스타그램 클론 만들기
좋아요 카운트 실시간 처리 방법 문의
좋아요 버튼의 경우 라이브 서비스시에 실시간으로 좋아요 카운트가 바뀔텐데, 이런경우엔 어떻게 작업하는게 좋을까요?? 예제 처럼 해서는 한번 받아온 데이터를 +1 해서 덮어 씌우는거라 문제가 생길것 같습니다!
- 미해결하울의 안드로이드 인스타그램 클론 만들기
로그인 하는 부분이 조금 이상한 것 같습니다.
이메일로 로그인을 할 때, 이미 계정이 존재하는 경우라면 signinAndSignup()의 리스너에서 else에 걸려 signinEmail()로 넘어가야 할 것 같은데요. 실제로는 else if의 !task.exception?.message.isNullOrEmpty() 에 걸려서 이미 존재하는 이메일로 계정을 만들려고 한다는 토스트만 뜹니다. 아마도 !가 없다면 모든 에러가 else로 넘어가서 로그인이 가능했지만 이제는 문제가 생기는 거 같네요ㅠㅠ
- 미해결하울의 안드로이드 인스타그램 클론 만들기
사진 업로드 액티비티 로딩 문제
포토픽커에서 사진을 선택해도 AddPhotoActivity에서 activity_add_photo를 불러오지 못하는 것 같습니다. 사진을 불러와도 메인화면 그대로입니다. setContentView도 제대로 설정했는데도 그러네요. 아래 소스처럼 하고 나서 AddPhotoActivity에서도 setContentView(R.layout.activity_add_photo)라고 입력했는데도 계속 흰색 메인화면만 나옵니다. 어떻게 해야 하나요? if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { startActivity(Intent(this, AddPhotoActivity::class.java)) } return true
- 미해결하울의 안드로이드 인스타그램 클론 만들기
갑자기 발생한 이슈입니다. 알수없는 문자들이 가득.
강의를 따라가던 중, 갑자기 많은 파일들이 이런 식으로 바뀌고 그 위에는 이런 메세지가 생겼습니다. <!-- ~ Copyright 2018 The Android Open Source Project ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> 그리고는 다 작동하지 않네요 ㅠㅠ...
- 해결됨하울의 안드로이드 인스타그램 클론 만들기
프라미스 에러
Callback 방식으로는 에러가 나지 않는데, promise 방식으로는 저 윗부분에서 에러가 납니다. 빨간 전구에서 알려주는 에러 내용은 다음과 같습니다. Type mismatch. Required:Continuation<UploadTask.TaskSnapshot!, com.google.android.gms.tasks.Task<???.???)>!> Found: (bolts.Task<UploadTsk.TaskSnapshot>) -> com.google.android.gms.tasks.Task(Uri!!>
- 미해결하울의 안드로이드 인스타그램 클론 만들기
구글 로그인 연동이 안되네요..
그대로 잘 따라 한것 같은데 처음에는 되는것 같다가 메인페이지 구현을 한후 구글로그인을 하려고 보니 선택 창은 뜨는데 아이디를 클릭하면 메인페이지로 안넘어가고 로그인 화면이 그대롭니다 ㅠㅠ 페이스북이랑 이메일 로그인은 되는데 왜그럴까요..ㅠ sha-1는 확인 했습니다!
- 미해결하울의 안드로이드 인스타그램 클론 만들기
컨텐츠 데이터 모델 차시에서 앱을 업로드하려고하는데 오류가 발생합니다.
Cannot fit requested classes in a single dex file (# methods: 105461 > 65536) 라는 오류가 뜨면서 앱이 업로드가 안되네요 ㅠㅠㅠ 해결법을 검색해서 아래와 같이 적용해보았지만 앱을 실행하면 강제로 중지됩니다 ㅠㅠㅠ minSdkVersion 이 20 이하인 경우 build.gradle 파일에서 multiDexEnable 을 true로 설정하고 multidex 지원 라이브러리를 추가해야 합니다. 그리고 custom application을 사용하지 않는다면 MultiDexApplication을 추가해야 합니다.
- 미해결하울의 안드로이드 인스타그램 클론 만들기
github에 자료가 없습니다.
자료가 없어서 타 이미지로 대체하여 학습하였지만 불편함이 있었습니다!
- 미해결하울의 안드로이드 인스타그램 클론 만들기
unresolved 오류
첨부된 이미지와 같이 FacebookActivity,CustomTabActivity 가 unresolved 오류가 발생하였습니다. 이 오류와 관계가 있는 것인지는 잘 모르겠습니다만 app > build.gradle 에서 implementation 'com.facebook.android:facebook-android-sdk:[4,5)' 가 계속 unsolved 에러가 나서 스택오버플로우 등을 통해 @aar 을 그 뒤에 다음과 같이 붙였습니다. 'com.facebook.android:facebook-android-sdk:[4,5)@aar' unsolved 에러는 해결했지만 위와 같은 에러로 진도를 못따라가고 있습니다 ㅠㅠ