In-Memory-Caching auf Repository-Ebene für Kotlin-Flüsse auf AndroidAndroid

Forum für diejenigen, die für Android programmieren
Guest
 In-Memory-Caching auf Repository-Ebene für Kotlin-Flüsse auf Android

Post by Guest »

Angenommen, Sie haben eine Liste von Benutzern in Ihrer Android -Anwendung aus einer Remote -Datenquelle heruntergeladen, und aus einem Grund haben Sie keine lokale DB. Diese Liste von Benutzern wird dann während Ihrer gesamten Anwendung in mehreren ViewModel verwendet, um andere Netzwerkanfragen zu stellen. Sie möchten sie sicherlich so lange zwischengespeichert, wie die App lebt und sie nur auf Nachfrage erneut abfasst. Dies bedeutet notwendigerweise, dass Sie es in der -Datenschicht zwischenspeichern möchten. Dies ist ein Repository in meinem Fall, um sie dann von Ihrem ViewModel s.
< Br/> Es ist einfach in einem Staatshalter wie einem ViewModel - Machen Sie einfach einen StateFlow oder was auch immer. Aber was ist, wenn wir einen Flow der Liste (das nach jeder API -Anforderung zwischengespeichert wird) in einem Repository aus der UI -Ebene aus der UI -Ebene vorgenommen werden möchten? Was ist die Testsable , stabil und rechts , um dies zu erreichen? < /p>

Code: Select all

class UsersRepository @Inject constructor(
private val usersApi: UsersApi,
private val handler: ResponseHandler
) {

private val _usersFlow = MutableStateFlow(Resource.Empty)
val usersFlow = _usersFlow.asStateFlow()

suspend fun fetchUserList() = withContext(Dispatchers.IO) {
_usersFlow.emit(Resource.Loading)
_usersFlow.emit(
handler {
usersApi.getUsers()
}
)
}
}
wobei ReaktionsHandler :
istclass ResponseHandler {
suspend operator fun invoke(block: suspend () -> T) = try {
Resource.Success(block())
} catch (e: Exception) {
Log.e(javaClass.name, e.toString())
val errorCode = when (e) {
is HttpException -> e.code()
is SocketTimeoutException -> ErrorCodes.SocketTimeOut.code
is UnknownHostException -> ErrorCodes.UnknownHost.code
else -> Int.MAX_VALUE
}
Resource.Error(getErrorMessage(errorCode))
}
}
< /code>
Aber während ich recherchierte Die Natur wird daher nicht empfohlen, im Repository zu verwenden. Für den kalten und reaktiven Strom können Sie in Repository Flow, Channelflow oder Callbackflow verwenden. Wenn er ist, wie genau helfen Kaltflüsse in dieser Situation und wie können wir sie richtig verwalten?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post