묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
storage 이미지파일 업로드가 안됩니다
안녕하세요 firebase storage에 png파일이 upload가 안됩니다 앱은 에러없이 잘 구현되는데 db에만 추가가 안되는것같습니다 코드는 https://github.com/jsistop16/dating-app 여기에 있습니다감사합니다
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의를 듣고 나서 개인 프로젝트에 적용 중인데 몇 가지 질문사항이 있습니다!
강의를 듣고 나서 개인 프로젝트에 적용 중인데 몇 가지 질문사항이 있습니다!안드로이드 앱 개발의 시작을 개복치님의 강의를 통해서 깨닫고 가르쳐주신 내용들로 졸업프로젝트에 적용중입니다 현재 게시글 업로드 부분에서 이미지 업로드 시에 갤러리에서 업로드하는 방법에 카메라로 찍어서 이미지를 업로드하는 기능을 구현 중에 있습니다.문제의 GetBoardWriteActivity 코드입니다.https://github.com/chihyeonwon/Capstone-Design/blob/master/app/src/main/java/com/example/giveback/GetBoard/GetBoardWriteActivity.kt코드에서 Dialog를 띄우고 카메라로 업로드하기를 눌렀을 때 권한이 있는 경우에 코드를 수정해봤는데 이미지 업로드하는 부분을 putFile로 하여 수정해야 할 것 같은데 어떻게 방법이 있을까요?카메라로 업로드 하는 경우에 이미지가 업로드는 되는데 까맣게 업로드가 됩니다.카메라로 촬영하기를 눌렀을 때 카메라로 사진을 찍는 것까지는 됩니다. 카메라로 사진을 찍은 후에 binding.imageArea 즉 이미지 부분이 찍은 사진으로 바껴야 하는데 이 부분이 안되는 것으로 보아 업로드할 때 문제가 있는 것 같습니다. 혹시 방법이 있을까요 ㅠㅠ?혹시나 해서 전체 코드 깃허브 링크 남겨드립니다.https://github.com/chihyeonwon/Capstone-Designps 이 강의 덕분에 학과에 잘 적응하여 졸업프로젝트를 앱으로 수행할 수 있게 되었습니다. 개복치님의 또 다른 강의들 중에 채팅 강의도 들어서 프로젝트에 적용 예정 중에 있습니다 ㅎㅎ 좋은 강의 감사합니다!!
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
IDE나 gradle 버전이 너무 올드해서 실행이 안됩니다.
최신 android studio를 다운 받아서 따라 해 보는데실행이 안됩니다.
-
해결됨[플러터플로우]코딩 없이 한 달 만에 앱 만들기
플러터 플로우 데스크탑 엡 설치 관련
ㅡ 안녕하세요, 플러터 플로우가 데스크탑에서도 설치가 가능 한걸로 알고 있습니다ㅡ 윈도우 10 환경에서 로컬 런 모드로 실행을 해보고 싶은데 동영상을 보고 그대로 설치를 하니깐 프로그램이 업데이트 점검 화면 이후 자동으로 꺼져 벼리는 등의 문제가 발생합니다. ㅡ 혹시 가능하시다면 로컬모드에서 FF설치 하는 절차나 문제점들을 영상으로 만들어서 추가 해주시면 도움이 될 것 같습니다. 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
검색하는거는 어떻게 하는겁니까
저는 안보이네요..
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
강의 잘듣고 디테일을 좀 수정해보고 싶은게 있어서 힌트좀 주시면 감사하겠습니다
1. ContentListActivity 관련해서 응용해보고 싶은게 있습니다! val database = Firebase.database val category = intent.getStringExtra("category") // 받은 카테고리 val 값 when (category) { "category1" -> { myRef = database.getReference("contents") } "category2" -> { myRef = database.getReference("contents2") } "category3" -> { myRef = database.getReference("contents3") } "category4" -> { myRef = database.getReference("contents4") } "category5" -> { myRef = database.getReference("contents5") } "category6" -> { myRef = database.getReference("contents6") } "category7" -> { myRef = database.getReference("contents7") } "category8" -> { myRef = database.getReference("contents8") } }이런식으로 강의내용에 추가해서 카테고리를 여러개 추가했는데요tip의 category1 이미지가 ALL입니다. 그래서 ALL에는 category2 부터 category8까지의 이미지가 모두 랜더링 됐으면 합니다. getReference에는 복수의 path를 넣을수 없게끔 되어있고 독스에 가서 읽어봐도 관련된 내용은 찾지못해서 어떻게 하는게 좋을지 잘 모르겠어서 글을 남깁니다.2. 댓글쓸때 title, time 만 랜더링되게끔 만들고싶은데 content도 같이 랜더링됩니다. 이걸 어떻게 해야 삭제할수있을까요?
-
해결됨[플러터플로우]코딩 없이 한 달 만에 앱 만들기
섹션2.1부 프로필 완성하기 selected reference to update 에 authenticated User 에 설정 질문
"섹션2.1부 프로필 완성하기" 수강중아래 이미지와 같이 selected reference to update 에 authenticated User 에 설정을 하려하는데알려준 항목이 없고, 선택이 되지 않습니다. 다른 source를 찾아봐도 알려준 항목이 없는데 왜 그런걸까요?이부분 설정이 안되어서 계속 에러로 남아서 run도 되지 않습니다. 어떤부분을 봐야할까요?
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
변수 초기화 위치
안녕하세요 강의도중 질문이 있습니다 loginActivity에서 login버튼 클릭시setOnClickListener안에서 email과 password값을 선언 및 초기화를 하면 정상적으로 화면 전환이되는데 setOnClickListener 윗줄에서 email과 password를 선언 및 초기화한 후에 해당 변수값을 가지고 auth.signInWithEmailAndPassword(email, password)이렇게 매개변수에 넣어주면 mainActivity로 이동하지않고 introActivity로 이동하더라구요 제가볼땐 변수의 초기화 위치가 클릭리스너 안이냐 바깥이냐는 크게 영향이 없을것같은데.. 이유가 뭔지 알수있을가요??
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
firebase SDK를 추가를 위한 Classpath 코드구문
파이어베이스를 안드로이드와 연동하는 과정중에 firebase SDK를 추가 하고자합니다. 하지만 강의에서 나온 firebase SDK를 추가를 위한 Classpath 코드구문이 없습니다..이럴땐 어떻게 해야 하나요??
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
Volar Deprecated
안녕하세요. 오랜만에 들어서 다시 처음부터 듣고있는데요 Volar 관련된 플러그인이 다 Deprecated되었다고 합니다. 대체할 게 있을까요?
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
firebase auth
auth객체 생성하고 createUserWithEmailAndPassword 메소드 실행할때 에러가 발생했습니다에러현상은 intro layout에서 회원가입 클릭시 앱이 팅기면서 꺼지고로그를 살펴보면 FATAL EXCEPTION: main Process: com.example.datingapp, PID: 18621 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.datingapp/com.example.datingapp.auth.SignUpActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.datingapp. Make sure to call FirebaseApp.initializeApp(Context) first.at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4111) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4277) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loopOnce(Looper.java:226)at android.os.Looper.loop(Looper.java:313)at android.app.ActivityThread.main(ActivityThread.java:8751)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this processcom.example.datingapp. Make sure to call FirebaseApp.initializeApp(Context) first.at com.google.firebase.FirebaseApp.getInstance(FirebaseApp.java:179)at com.google.firebase.auth.FirebaseAuth.getInstance(com.google.firebase:firebase-auth@@22.1.2:1)at com.google.firebase.auth.ktx.AuthKt.getAuth(com.google.firebase:firebase-auth-ktx@@22.1.2:8)at com.example.datingapp.auth.SignUpActivity.onCreate(SignUpActivity.kt:23)at android.app.Activity.performCreate(Activity.java:8290)at android.app.Activity.performCreate(Activity.java:8270)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4085)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4277) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8751) at java.lang.reflect.Method.invoke(NativeMethod) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) 이렇게 발생하고 있습니다 전체코드는 https://github.com/jsistop16/dating-app여기에 push해놓았습니다
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
splash manifest 설정시 에러
안녕하세요 e: This version (1.4.4) of the Compose Compiler requires Kotlin version 1.8.10 but you appear to be using Kotlin version 1.9.0 which is not known to be compatible. Please consult the Compose-Kotlin compatibility map located at https://developer.android.com/jetpack/androidx/releases/compose-kotlin to choose a compatible version pair (or suppressKotlinVersionCompatibilityCheck but don't say I didn't warn you!). 스플래시 화면 만들고 컴파일 돌리면 이런 에러가 발생하는데구글링해서 build.gradle에서 버전을 수정해봐도 계속 같은 에러가 발생합니다...
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
디바이스 에뮬레이터 질문
안녕하세요 bts 앱 듣고있는데 디바이스 에뮬레이터 실행하여 run app을 누르면 Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable 가 나오면서 진행이 되지 않아 질문드립니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
디데이어플에서 날짜계산이 안됩니다..
실행을 했는데 앱 꺼짐없이 실행은 잘되나 마지막 강의까지 듣고 코드를 수정했는데갑자기 날짜 계산값이 다 0으로 출력됩니다.어딘가 오류가 있는 듯 한데.. 못 찾겠네요. ㅠㅠ package com.sunny.dday import android.app.DatePickerDialog import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import android.widget.DatePicker import android.widget.TextClock import android.widget.TextView import androidx.annotation.RequiresApi import java.time.Month import java.util.Calendar import java.util.GregorianCalendar import java.util.concurrent.TimeUnit class MainActivity : AppCompatActivity() { @RequiresApi(Build.VERSION_CODES.N) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val startButton = findViewById<Button>(R.id.startBtn) val endButton = findViewById<Button>(R.id.endBtn) var startDate = "" var endDate = "" val calendar_start = Calendar.getInstance() val calendar_end = Calendar.getInstance() startButton.setOnClickListener { val today = GregorianCalendar() val year = today.get(Calendar.YEAR) val month = today.get(Calendar.MONTH) val day = today.get(Calendar.DATE) val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener { override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) { // startDate = "${year} + ${month+1} + ${dayofMonth}" startDate = year.toString() + (month + 1).toString() + dayOfMonth.toString() calendar_start.set(year, month + 1, dayOfMonth) Log.d("day : ", startDate) } }, year, month, day) dlg.show() } endButton.setOnClickListener { val today = GregorianCalendar() val year = today.get(Calendar.YEAR) val month = today.get(Calendar.MONTH) val day = today.get(Calendar.DATE) val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener { override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) { // endDate = "${year} + ${month+1} + ${dayofMonth}" endDate = year.toString() + (month + 1).toString() + dayOfMonth.toString() calendar_end.set(year, month + 1, dayOfMonth) val finalDate = TimeUnit.MICROSECONDS.toDays(calendar_end.timeInMillis - calendar_start.timeInMillis) Log.d("day : ", endDate) val textArea = findViewById<TextView>(R.id.finalDate) textArea.setText(finalDate.toString()) Log.d("finalday : ", finalDate.toString()) } }, year, month, day) dlg.show() } } }
-
미해결너네 백엔드 하고 싶은 거 있으면 얼마든지 해 난 괜찮어 왜냐면 나는 파이어베이스가 있어
onAuthStateChanged 가 가지는 장점에 대해
기존의 렌더링 -> 통신 순으로 진행되던 프로세스를통신 -> 렌더링 순으로 바꿔준다고 하는데그러면 렌더링 -> 통신 -> 변화된 상태 업데이트 였던 것을통신 -> 변화된 상태 업데이트 로 일종의 렌더링 최적화를 시켜준다는 뜻으로 이해해도 될까요?
-
해결됨Flutter로 SNS 앱 만들기
삼항연산자에 대한 질문
안녕하세요 . 프로필 사진에서 삼항연산자를 아래처럼 사용하면 코드가 더 효율적일꺼라 생각했는데 에러가 발생합니다.아래처럼 사용하는 건 틀린건가요? CircleAvatar( radius: 64, backgroundImage: _image == null ? AssetImage('assets/images/profile.png') : MemoryImage(_image!),)
-
미해결Flutter로 SNS 앱 만들기
섹션8번 signOut
강의에서 signOut을 추가하여서 추가를 해보니 오류가 뜹니다. await FirebaseAuth.instance.signOut();으로 바꿨을때는 문제가 없습니다.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
Notification 구현시 컴파일에러
class MainActivity : AppCompatActivity() { lateinit var cardStackAdapter: CardStackAdapter lateinit var manager : CardStackLayoutManager private val TAG = "MainActivity" private val usersDataList = mutableListOf<UserDataModel>() private var userCount = 0 private val uid =FireBaseAuthUtils.getUid() private lateinit var currentUserGender : String private val REQUEST_CODE = 123 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val isTiramisuOrHigher = Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU val notificationPermission = Manifest.permission.POST_NOTIFICATIONS var hasNotificationPermission = if (isTiramisuOrHigher) ContextCompat.checkSelfPermission(this,notificationPermission) == PackageManager.PERMISSION_GRANTED else true val launcher = registerForActivityResult(ActivityResultContracts.RequestPermission()){ hasNotificationPermission = it } if(!hasNotificationPermission) { launcher.launch(notificationPermission) } val setting = findViewById<ImageView>(R.id.settingIcon) setting.setOnClickListener{ // val auth = Firebase.auth // auth.signOut() // val intent = Intent(this,SettingActivity::class.java) startActivity(intent) } val cardStackView = findViewById<CardStackView>(R.id.cardStackView) manager = CardStackLayoutManager(baseContext,object : CardStackListener{ override fun onCardDragging(direction: Direction?, ratio: Float) { } override fun onCardSwiped(direction: Direction?) { if(direction == Direction.Right){ userLikeOtherUser(uid,usersDataList[userCount].uid.toString()) } if(direction == Direction.Left){ } userCount = userCount + 1 if(userCount == usersDataList.count()){ getUserDataList(currentUserGender) Toast.makeText(this@MainActivity,"유저 리스트를 새롭게 받아옵니다.",Toast.LENGTH_SHORT).show() } } override fun onCardRewound() { } override fun onCardCanceled() { } override fun onCardAppeared(view: View?, position: Int) { } override fun onCardDisappeared(view: View?, position: Int) { } }) cardStackAdapter = CardStackAdapter(baseContext,usersDataList) cardStackView.layoutManager = manager cardStackView.adapter = cardStackAdapter // getUserDataList() getMyUserData() } private fun getMyUserData(){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { val data = dataSnapshot.getValue(UserDataModel::class.java) Log.d(TAG,data.toString()) currentUserGender = data?.gender.toString() getUserDataList(currentUserGender) } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userInfoRef.child(uid).addValueEventListener(postListener) } private fun getUserDataList(currentUserGender : String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // val post = dataSnapshot.getValue<Post>() for(dataModel in dataSnapshot.children){ val user = dataModel.getValue(UserDataModel::class.java) if(!user!!.gender.toString().equals(currentUserGender)){ usersDataList.add(user!!) } } cardStackAdapter.notifyDataSetChanged() } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userInfoRef.addValueEventListener(postListener) } private fun userLikeOtherUser(myUid : String, otherUid : String) { FireBaseRef.userLikeRef.child(myUid).child(otherUid).setValue("true") getOtherUserLikeList(otherUid) } private fun getOtherUserLikeList(otherUid : String){ val postListener = object : ValueEventListener { override fun onDataChange(dataSnapshot: DataSnapshot) { // 여기 리스트에서 나의 UID가 있나 확인 필요 for(dataModel in dataSnapshot.children){ val likeUserKey = dataModel.key.toString() if(likeUserKey.equals(uid)){ Toast.makeText(this@MainActivity,"매칭완료",Toast.LENGTH_SHORT).show() createNotificationChannel() sendNotification() } } } override fun onCancelled(databaseError: DatabaseError) { // Getting Post failed, log a message Log.w(TAG, "loadPost:onCancelled", databaseError.toException()) } } FireBaseRef.userLikeRef.child(otherUid).addValueEventListener(postListener) } // 알림 private fun createNotificationChannel() { // Create the NotificationChannel, but only on API 26+ because // the NotificationChannel class is not in the Support Library. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 채널 이름 val name = "name" val descriptionText = "description" val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel("TestChannel", name, importance).apply { description = descriptionText } // Register the channel with the system. val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } } private fun sendNotification(){ var builder = NotificationCompat.Builder(this, "TestChannel") .setSmallIcon(R.drawable.ic_launcher_background) .setContentTitle("My notification") .setContentText("Hello World!") .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setCategory(NotificationCompat.CATEGORY_MESSAGE) with(NotificationManagerCompat.from(this)){ notify(123,builder.build()) } } }안녕하세요. 알림기능 구현하는데notify(123,builder.build()) 위 부분에서 Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with checkPermission) or explicitly handle a potential SecurityException 이런 에러가 아직도 발생하고있는데 어떻게 해결할수 있을지 자세한 답변을 부탁드려도될까요? 구글링 해봤는데 명확히 어떤코드 입력해서 컴파일에러를 지울 수 있을지 모르겠습니다. 빠른답변 부탁드리겠습니다.
-
미해결핸즈온 리액트 네이티브
FirebaseError: auth/already-initialized
안녕하세요, 8강 끝부분을 따라가고 있는 중입니다. 프로젝트에서 npm start 해놓고 expo go 어플로 실시간으로 확인하면서 작업을 진행 중인데요, 새로고침 할 때(r눌러서)는 괜찮은데, VS Code에서 저장을 해서 자동으로 리랜더링 될때마다 아래와 같은 에러 메세지가 콘솔 창에 나타납니다.[FirebaseError: Firebase: Error (auth/already-initialized).] 특별히 뭐가 안되거나 하는건 아닌데... r 눌러서 아예 앱을 새로고침하면 뜨지않습니다. 어디선가 중복으로 초기화하고있다는 뜻일까요? firebase.js 파일 코드 첨부합니다! 추가로 보여드려야 하는 다른 코드가 있다면 말씀 부탁드립니다. screen 부분은 제가 다르게 가져가고 있는데 이 외에 기능부분에 대한 것들은 강의와 동일하게 진행 중입니다. firebase.jsimport { initializeApp } from 'firebase/app'; import { firebaseConfig } from '../../env'; import { getReactNativePersistence, initializeAuth } from 'firebase/auth'; import AsyncStorage from '@react-native-async-storage/async-storage'; export const initFirebase = () => { // Initialize Firebase try { const app = initializeApp(firebaseConfig); initializeAuth(app, { persistence: getReactNativePersistence(AsyncStorage), }); return app; } catch (e) { // eslint-disable-next-line no-console console.error(e); } };
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
호스팅 문제 관련 질문 있습니다.
안녕하세요!! 강의를 보며 호스팅까지 진행하였습니다. 이후 설정된 url로 이동하니 이화면으로 계속 이동이 되는데 무슨 오류가 있는건지 어려워서요.. 혹시 해결방법이 있을까요?