DataStoreEx 파트 class MyDataStore(context: Context) { 수정 제안)
486
27 asked
기존 : 지역 변수
DataStoreEx 파트 class MyDataStore {
...
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")...
}
제안 : 전역 변수로 변경
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")DataStoreEx 파트 class MyDataStore {
...
}
위 내용을 코딩중 Context.dataStore은 전역 변수 또는 싱글톤으로 제작 해야 안정적으로 보입니다 .
예를 들어서 Activity안에 위 클래스를 생성하는 코드를 작성한 후 동작 하면 일단은 동작 합니다.
하지만 다시 Activity에 진입하면 에러가 납니다.
DataStore version 1.0.0입니다.
왜 그런지 찾아 보니
버전 1.0.0-alpha07
2021년 2월 24일
androidx.datastore:datastore-*:1.0.0-alpha07이 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
Context.createDataStore확장 함수를 삭제하고 globalDataStore 속성 위임으로 대체했습니다. kotlin 파일의 최상위 수준에서 globalDataStore를 한 번 호출합니다. 예:val Context.myDataStore by dataStore(...)kotlin 파일의 최상위 수준에 배치하면 이 인스턴스가 하나만 생깁니다. (I57215, b/173726702)
RxDataStore 함수는 이제 DataStore의 확장 함수 대신 RxDataStore 클래스에 있습니다. (Idccdb, b/177691248)
EncryptedSharedPreferences를 DataStore로 이전(또는 SharedPreferences를 직접 부팅)하려는 경우 이제 SharedPreferences를 삽입할 수 있는 새로운 SharedPreferencesMigration 생성자를 사용하면 됩니다. (I8e04e, b/177278510)
================================
버그 수정
동일한 파일에 활성 DataStore가 여러 개 있는 경우 이제 DataStore에서 예외가 발생합니다. DataStore를 싱글톤으로 관리하지 않았거나 한 파일의 DataStore 인스턴스 두 개가 동시에 활성화되지 않도록 조치하지 않은 경우 이제 DataStore를 읽거나 DataStore에 쓸 때 예외가 발생할 수도 있습니다. DataStore를 싱글톤으로 관리하면 해결할 수 있습니다. (Ib43f4, b/177691248)
호출자 범위 취소 시의 취소 동작을 수정합니다. (I2c7b3)
라고 적혀 있네요 ...
그래서 전 Context.myDataStore를 전역 변수로 수정하고 테스트 했는데 정상적으로 동작 되는것을 확인 했습니다.
이상입니다.
Answer 3
1
좋은 글이네요.
companion object {
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")
}
0
class MyDataStore(context : Context {
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")
=> 에서
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")
class MyDataStore(context : Context {
로 Context.dataStore 를 class밖으로 뺐어요 ...
0
안녕하세요
좋은 제안 주셔서 감사합니다.
해당 부분 다시 확인해보겠습니다.
(사실 프레퍼런스나 유틸 종류는 싱글톤으로 저도 많이 사용하긴 합니다만, 예제다 보니 이렇게..)
그런데 제안주신 부분이
기존
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")
제안
private val Context.dataStore : DataStore<Preferences> by preferencesDataStore("user_pref")
이렇게 똑같이 말씀주셨는데 혹시 어떻게 변경하셨는지 알 수 있을까요?
6강에 비디오가 이상해요
0
22
1
진입 여부 판단 기준 질문
0
68
3
피그마 first draft 기능 질문
0
43
3
upup 질문
0
53
2
data.ai 필터링 검색이 안됩니다!
0
43
1
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
47
1
앱 리텐션에 대한 질문
0
45
2
저예산+최대지출 캠페인 유지시간
0
62
2
강의가 검은 화면으로 나옵니다.
0
48
1
histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/
1
43
2
DI시 eager과 lazy
0
36
2
타입스크립트
0
46
1
actuator에서 health 외의 다른 URL은 404 Notfound 에러가 발생합니다.
0
46
2
SettlementTargetRepository Jquery 질문
1
46
2
부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?
1
59
2
주사위앱 소개 및 레이아웃 설정 문제
0
59
2
엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??
1
65
2
다작을 위한 비공개 테스트와 계정에 대해서 궁금합니다!
0
104
2
suspend fun 과 viewModelScope.launch 에 대해 궁금합니다.
0
102
2
ListAdapter / DiffUtil 관련 강의 문의
0
289
3
강의에서 말씀하시는 레포지토리가
0
283
1
paging lv3 에서 json 받아오는 도메인이 만료됬다고 떠요
0
383
2
Transformations 가 import가 안됩니다!!
0
1120
2
질문드립니다!
0
323
1

