묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
이미지가 기본이미지인지 확인
이미지 업로드 처리 여부를 결정하기 위해서 개복치개발자님이 말씀하신 것처럼 기본이미지 인지 확인하는 코드를 짜봤는데 우선 실행했을 때 에러가 나는 부분은 없는 것 같습니다.첨부된 코드가 개복치 개발자님이 의도하신 내용이 맞는지 또 문제가 없는지 궁금합니다!
-
미해결Flutter 초입문 왕초보편
soundpool 라이브러리가 없습니다
실로폰 만들기 강의 듣고 있는데 soundpool 라이브러리가 지원 종료된거 같습니다...
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
ActivityMainBinding에 오류가 납니다
dataBinding{ enable = true }이렇게 했는데도 오류가 납니다
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
선생님 onBackPressed 작동이 안되는거 같습니다
뒤로가기 버튼 누르면 바로 나가집니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
앱 배포 후 광고 비용을 반드시 집행하시나요?
안녕하세요!인프런 강의를 들으면서 요 두달정도?에 앱을 여러개 만들어봤는데플레이콘솔 들어갈때마다 다운로드 수는 0명만 나와서 웃기만 하고 있는 상태입니다.앱이 매력적이면 자연유입이 되는것인지,아니면 구글애즈를 통해 광고를 집행해야 비로소 자연유입이 생기는건지? 궁금합니다.(아직 광고 집행은 겁이 나기도 하고 제 앱 자체에 확신이 없어서 구글 광고 집행 관련 영상은 아직 안 본 상태입니다 ㅎㅎ;)
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
DTO 작성시 freezed 3.0 변경 부분 문의
이전 강의에서 freezed 3.0 변경점으로 default 사용시 일반 생성자 초기화하듯 사용하는 방법으로진행해도 된다고 하셨는데 @JsonKey 사용법도 기존 생성자 작성과 동일하기 하고 아래 *참고소스1과 동일하게 진행해도 되는지 문의드립니다. 참고소스1import 'package:freezed_annotation/freezed_annotation.dart'; part 'company_info_dto.freezed.dart'; part 'company_info_dto.g.dart'; // ignore_for_file: annotate_overrides @freezed @JsonSerializable() class CompanyInfoDto with _$CompanyInfoDto { @JsonKey(name: 'Symbol') final String? symbol; @JsonKey(name: 'Name') final String? name; @JsonKey(name: 'Description') final String? description; @JsonKey(name: 'Industry') final String? country; @JsonKey(name: 'Country') final String? industry; const CompanyInfoDto({ this.symbol, this.name, this.description, this.industry, this.country, }); factory CompanyInfoDto.fromJson(Map<String, dynamic> json) => _$CompanyInfoDtoFromJson(json); Map<String, dynamic> toJson() => _$CompanyInfoDtoToJson(this); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
애드몹 일치율은 100%인데 노출율이 너무 낮아요
안녕하세요, 프로그래밍좀비님 강의 덕분에 시행착오를 줄이고아직 얼마되지는 않지만 앱 수익화에 도움을 많이 받고 있습니다.🙇♀ 애드몹 보고서를 보다가 의문이 생겨 질문드립니다.일치율은 모든 국가가 100%인데, 노출률이 평균 50%~ 심하게는 0%입니다.찾아보니 광고를 로드는 했지만 노출하지 못했을 때 이런 현상이 생길 수 있다고 하는데,현재 광고는 스플래시 화면에서 전면광고와, 홈배너를 로드하고 이후 전면광고를 보여주고 홈화면으로 넘어가도록 되어있습니다.스택은 expo, react-native를 사용하고, 안드로이드에만 배포되어있습니다!저는 경험이 짧아 원인 파악에 어려움을 겪고 있는데,혹시 이런 경험을 하셨거나 추측되는 원인이 있으실까요?
-
미해결하울의 안드로이드 인스타그램 클론 만들기
CloudFireStore에 데이터가 들어가지 않아요
//Promise method (권장) storageRef?.putFile(photoUri!!)?.continueWithTask { task: Task<UploadTask.TaskSnapshot> -> return@continueWithTask storageRef.downloadUrl }?.addOnSuccessListener { uri-> var contentDTO = ContentDTO() contentDTO.imageUrl = uri.toString() contentDTO.uid = auth?.currentUser?.uid contentDTO.userId = auth?.currentUser?.email contentDTO.explain = findViewById<EditText>(R.id.addphoto_edit_explain).text.toString() contentDTO.timestamp = System.currentTimeMillis() // :: firestore에 들어가지 않음!! firestore?.collection("images")?.document()?.set(contentDTO) setResult(Activity.RESULT_OK) finish() } 강의처럼 진행했고 오류도 안나고 하는데도 Cloud Firestore에 들어가지 않습니다..ㅠ 규칙도 다음과 같이 정의했습니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
앱 다작 관련해서 질문드립니다.
안녕하세요!다작 관련된 부분 수강 중에 추가로 노하우 궁금한 점이 있어 문의드립니다.회원 관리는 어떻게 하는지 아래 사항들이 궁금합니다. 회원들이 가입해서 사용하는 서비스들도 하시는것같은데, SNS 로그인 등 외부 api를 사용해서 하는지 궁금합니다.(하신다면 효율적으로 어떻게 관리하는지, 안하신다면 어떤 식으로 가입시키는지)회원들의 데이터들도 전부 한 DB를 사용해서 하는지 궁금합니다.(각 서비스별 디비 칼럼이 다 다를것같아요)DB를 하나로 300개 이상의 앱을 했을 때 회원 테이블은 어떻게 구분해서 사용하는지 궁금합니다.
-
미해결Flutter로 메신저앱 만들기
채팅목록 스크린에서 ref.listen ()말고 ref.watch().when()을 쓰는 이유는?
채팅목록화면을 만들때 final chatListProvider = StreamProvider.autoDispose<List<ChatModel>>((ref) { final currentUserModel = ref.watch(authProvider).userModel; return ref.watch(chatRepositoryProvider).getChatList( currentUserModel: currentUserModel, );});ref.watch(chatListProvider).when()을 사용하여 채팅목록화면을 만듭니다. when 문을 쓰게 되면 데이터 변화가 있을때마다 getChatList 함수가 실행됩니다. 매번 데이터에 변화가 있을때마다 getChatList함수가 실행이되면 너무 많은 데이터를 불러올 것으로 생각이 되어집니다. 여기서 궁금한 건, 채팅화면에서는 페이지네이션을 적용해서 초기화면을 조회할때는 limit를 설정해서 몇개의 데이터만 불러오고 화면을 올렸을때 lastid를 기준으로 데이터를 추가적으로 불러오는 형태로 화면을 구상하였는데, 채팅목록도 마찬가지고 처음에는 몇개의 데이터만 가져오고 사용자가 화면을 스크롤했을때 추가적으로 데이터를 불러오게 하면 안 되는건가요...?
-
미해결하울의 안드로이드 인스타그램 클론 만들기
firebase storage에서 putfile해도 이미지 업로드가 안되요..
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() }이런식으로 강의랑 똑같이해도 에러는 안나지만Toast메시지가 안뜹니다. 제 버전과 storage 규칙은 아래와 같습니다.// 버전 firebaseAuth = "23.2.0" firebaseStorageKtx = "21.0.1" // 규칙 allow read, write: if false;
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용시 기능은 동작하지만 Radio위젯에 선택 표시가 안되는 부분 질문
sealed class 사용시 Radio위젯에 선택 표시가 안되는 이유는 Radio위젯에 value == groupValue 값이 같아도 객체 참고가 다르기 때문에 발생되는 것으로 확인했습니다. orderType비교시 == 값이 같은 경우 가능하도록 내용을 수정했는데 제대로 수정했는지 궁금해서 문의드립니다. *참조코드 2 내용 1.*참조코드 2 내용 수정이 잘되었는지 확인2.freezed 사용시 자동으로 만들어 주는 부분인데 seald 클래스 사용시 팁이 있는지 궁금합니다. 3.copyWith 부분도 추가하는 형태도 궁금합니다. 참조코드 1import 'package:flutter/material.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; class OrderSection extends StatelessWidget { final NoteOrder noteOrder; final Function(NoteOrder noteOrder) onOrderChanged; const OrderSection({ super.key, required this.noteOrder, required this.onOrderChanged, }); @override Widget build(BuildContext context) { return Column( children: [ Row( children: [ Radio<NoteOrder>( value: NoteOrder.title(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.title(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('제목'), Radio<NoteOrder>( value: NoteOrder.date(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.date(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('날짜'), Radio<NoteOrder>( value: NoteOrder.color(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.color(noteOrder.orderType)); }, activeColor: Colors.white, ), const Text('색상'), ], ), ], ); } } 참조코드 2import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder { final OrderType orderType; const NoteOrder(this.orderType); factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; @override bool operator ==(Object other) { return runtimeType == other.runtimeType && other is NoteOrder && other.orderType == orderType; } @override int get hashCode => Object.hash(runtimeType, orderType); } class NoteOrderTitle extends NoteOrder { NoteOrderTitle(super.orderType); } class NoteOrderDate extends NoteOrder { NoteOrderDate(super.orderType); } class NoteOrderColor extends NoteOrder { NoteOrderColor(super.orderType); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z
Git에서 다운받은 폴더가 안열리는 분들
섹션 3에서 git 파일들을 다운받아서 열면 gradle 버전, JDK 버전이 안맞는다고 에러가 뜨네요.이거저거 찾아서 해봐도 도저히 안되던데, 그냥 구버전 안드로이드 스튜디오를 받아서 하니 되네요.비슷한 문제 있는 분들은 기존 버전 완전 삭제하고 (설정 파일 등까지 모두 삭제) 재설치 해보세요. https://developer.android.com/studio/archive여기서 Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 버전 쓰시면 됩니다.(사이트가 안뜨면 언어를 영어로 바꾸시면 뜰 거에요)
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
질문에다 글을 적는 것이 맞는가싶지만..
안녕하세요, 좀비님의 강의를 듣고 욕심이 생겨서 첫 프로젝트를 세상에 공개해봤습니다. (좋은 강의 감사합니다 ㅜ_ㅜ 아직 덜봤지만 이렇게 의욕이 생기게 해주신 것만으로도..감사합니다)아쉽게도 앱은 아니고 웹인데 간단한 설명을 먼저 드릴까합니다 !광고는 애드센스로 현재 신청중에 있으며 이것저것 공부해보고 있습니다 !서비스명 : 부동산등기 Json 변환 및 갑을구 한눈에 보기 서비스를 소개합니다! ## 주요 특징1. 부동산등기 파일을 JSON으로 변환 : 복잡한 등기 파일을 손쉽게 데이터화!2. 갑을구 한눈에 보기 : 변환된 JSON 파일을 바탕으로 갑을구를 한눈에 확인하세요.3. 사용자 맞춤테이블 구성 : 보고 싶은 권리만 선택하여 원하는 테이블 형태로 볼 수 있습니다.4. 변환된 JSON 다운로드 : 변환된 파일을 간편하게 다운로드하여 저장하세요.## 타겟 고객1. 부동산등기 파일을 데이터화하고 싶은 분2. 등기 파일에서 갑구/을구만 빠르게 확인하고 싶은 분## 차별점무료로 부동산등기부등본 파일을 분석해주는 서비스가 없음분석된 Json 을 바탕으로 갑구, 을구를 한 눈에 보고 빠르게 [https://landscan.site](https://landscan.site)
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
>app>res>layout 이 존재하지 않습니다.
강의 내용의 안드로이드 스튜디오 버젼이 달라 따라 가는 것에 혼란이 있습니다.APP의 메뉴구조가 다릅니다.>app>res>layout 이 존재하지 않습니다.
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
애드몹 match rate이 너무 낮아요
제 애드몹에는 세개의 앱이 있고 DAU는 하루 20명이 되지 않아요. 세 앱 모두 배너 광고만 달아둔 상태였습니다.4월 초에 광고게제제한이 걸리기전에 match rate은 8-90프로 이상이었어요. 일주일 정도 전에 광고 게제제한은 풀렸는데 match rate이 너무 낮아요. 2-3 프로 정도 밖에 되지 않아요.특정 앱만 그런게 아니라 세 게 앱 모두 match rate이 낮아요. 이런 계정에 앱을 추가하거나 광고 유닛을 다는 것이 소용이 있을까 이런 생각이 듭니다.혹시 match rate이 너무 낮아진 경험이 있으신가요? 어떻게 문제를 해결해야 할까요?
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용시 The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류
The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류 관련으로 문의드립니다. sealed class에서 noteOrder.orderType를 접근할때 *참고사진1의 오류가 발생했습니다.해당 오류는 sealed class 내부에 noteOrder.orderType에 접근 할수 없다라는 내용으로 *참고코드 2에서 *참고코드 3와 같이 sealed class에서 getter를 선언하고 각 클래스에서 해당 값을 사용할수 있도록 @override로 수정했으나 의문점이 생겨 문의드립니다. 1.*참고코드3 sealed class 수정사항이 맞는지 궁금합니다.2.*참고코드3 사항이 맞는 경우 sealed class에서 getter로 OrderType get orderType; 사용했다면나머지 class부분에서 orderType를 강제로 구현을 해야하기 때문에 orderType를 사용하지 않는 class 작성시 문제가 될것 같습니다. 혹시 해당 사항에서는 어떻게 해야할찌 궁금합니다. *오류 내용*참고사진1 *order_section.dart*참고 수정코드1import 'package:flutter/material.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; class OrderSection extends StatelessWidget { final NoteOrder noteOrder; final Function(NoteOrder noteOrder) onOrderChanged; const OrderSection({ super.key, required this.noteOrder, required this.onOrderChanged, }); @override Widget build(BuildContext context) { return Column( children: [ Row( children: [ Radio<NoteOrder>( value: NoteOrder.title(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.title(noteOrder.orderType)); }, ), ], ), ], ); } } *note_order.dart*참고 코드2import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { OrderType orderType; NoteOrderColor(this.orderType); } *참고 코드3(수정함)import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { OrderType get orderType; factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { @override OrderType orderType; NoteOrderColor(this.orderType); } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Flutter 중급 1편 - 클린 아키텍처
유즈케이스 관련하여 질문 드립니다.
강의 정말 잘 듣고 있습니다! 혹시 유즈케이스 같은 경우는 레포지토리의 함수가 10개라고 가정하면 10개 다 만들어주는 편인가요??
-
미해결Flutter 중급 1편 - 클린 아키텍처
mockito사용시 오류 해결법
mockito 사용시 최신버전 mockito: ^5.4.6으로 사용했을때 freeze와 동일한 오류가 나는 경우analyzer문제 인것 같은데 mockito 상위버전 사용시 analyzer 높아서 빌드가 불가능한 현상이 있었습니다. clean후 아래 방법을 이용해서 빌드 진행하면 해결됩니다.! dependencies: analyzer: ^6.0.0dev_dependencies: mockito: ^5.0.6 사용 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 사용 문의2
알려주신 sealed class으로 내용 작성 중에 선생님이 의도하신 부분으로 작성을 했는지 문의드립니다. 1.get_notes_use_case.dart 부분 switch case 이중 작성 부분2.switch case 이중 작성 부분 *참고코드4 처럼 final을 안쓰고 사용가능 여부 note_order.dart*NoteOrder sealed class 구현부*참고 코드1import 'package:flutter_note_app/domain/model/util/order_type.dart'; sealed class NoteOrder<T> { factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; factory NoteOrder.date(OrderType orderType) = NoteOrderDate; factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { OrderType orderType; NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { OrderType orderType; NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { OrderType orderType; NoteOrderColor(this.orderType); } order_type.dart*OrderType 구현부 sealed class 구현부*참고 코드2sealed class OrderType<T> { factory OrderType.ascending() = Ascending; factory OrderType.descending() = Descending; } class Ascending<T> implements OrderType<T> { Ascending(); } class Descending<T> implements OrderType<T> { Descending(); } get_notes_use_case.dart*notes use case 구현부*참고 코드3import 'package:flutter_note_app/domain/model/note.dart'; import 'package:flutter_note_app/domain/model/util/note_order.dart'; import 'package:flutter_note_app/domain/model/util/order_type.dart'; import 'package:flutter_note_app/domain/repository/note_repository.dart'; class GetNotesUseCase { final NoteRepository repository; GetNotesUseCase(this.repository); Future<List<Note>> call(NoteOrder noteOrder) async { List<Note> notes = await repository.getNotes(); switch (noteOrder) { case NoteOrderTitle(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.title.compareTo(b.title)); break; case Descending(): notes.sort((a, b) => -a.title.compareTo(b.title)); break; } break; case NoteOrderDate(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.timestamp.compareTo(b.timestamp)); break; case Descending(): notes.sort((a, b) => -a.timestamp.compareTo(b.timestamp)); break; } break; case NoteOrderColor(orderType: final orderType): switch (orderType) { case Ascending(): notes.sort((a, b) => a.color.compareTo(b.color)); break; case Descending(): notes.sort((a, b) => -a.color.compareTo(b.color)); break; } break; } return notes; } } *저번 질문에서 선생님이 알려준 final 안쓰고 사용할수 있는 팁*참고 코드4switch (event) { case ChangeColor(): _changeColor(event.color); break; case SaveNote(): _saveNote(event.id, event.title, event.content); break; } - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.