SharedPreferences で解決される状況があります。しかし今、私は kotlin と DataStore に移行しています。
私はこの問題に直面しました。
他のキーと値のペアの中で、共有設定に格納されている文字列値があります。この文字列は、Retrofit 呼び出しの baseUrl パラメータで使用する URL です。
私の問題は、ViewModel で実行しているときに Fragment の値を取得する正しい方法は何かということです。
これは私のコードの一部です:
@Singleton
class PreferencesManager @Inject constructor(
@ApplicationContext context: Context,
anioDao: AnioDao
) {
val baseUrlFlow = dataStore.data
.catch { exception ->
if (exception is IOException) {
Log.e(TAG, "Error reading preferences: ", exception)
emit(emptyPreferences())
} else {
throw exception
}
}
.map {
it[PreferencesKeys.BASER_URL] ?: "http://192.168.2.109:1337"
}
}
次にViewModelクラスで
class EnsayosViewModel @ViewModelInject constructor(
private val ensayoRepository: EnsayoRepository,
private val anioRepository: AnioRepository,
private val localidadRepository: LocalidadRepository,
private val epocaRepository: EpocaRepository,
private val preferencesManager: PreferencesManager,
private val agrotrackerApi: AgrotrackerApi,
@Assisted private val state: SavedStateHandle
) :
ViewModel() {
...
//Base Url
val baseUrlFlow = preferencesManager.baseUrlFlow
private val _baseUrl = MutableLiveData<String>()
private fun getBaseUrl() {
viewModelScope.launch {
baseUrlFlow.flowOn(Dispatchers.IO).collect{
_baseUrl.value = it
}
}
}
...
fun fetchEsayosFromAT() {
//This is where I want to get value of the base_url key.
}
しかし、単純なタスクの場合、非常に複雑なようです...
私は何が欠けていますか?私は本当に迷っています。
よろしくお願いします