我将为此StoreBuilder使用哪种密钥

问题描述 投票:1回答:1

因此,我正在尝试使用一个简单的android应用程序尝试商店4(https://github.com/dropbox/Store),该应用程序从此占位符站点获取数据:https://jsonplaceholder.typicode.com/

第一个屏幕将是所有用户的列表。我想在您第一次打开应用程序时获取它们。但是,当您重新打开该应用程序或返回到第一个屏幕时,我想先从会议室数据库中获取它,然后再从互联网中获取它们(数据库没有更改的事实很简单)。

我希望ViewModel需要接受由StoreBuilder创建的对象,所以我正在DI(Koin)中创建该对象的定义。但是,StoreBuilder一直要求我提供密钥。而且我开始怀疑,如果您要获取all用户,则Store不是正确的选择。我正在尝试在程序中使用Store,因为我对使用它感兴趣。我的问题是,如何?或简单地说:

在这种情况下,我应该使用什么钥匙?我应该完全使用钥匙吗?为什么需要使用密钥?

到目前为止,我的代码的摘录(不是它的一部分):

object KoinModules {
    val repositoryModule = module {
        single { StoreBuilder
            .fromNonFlow { provideUserService(get()).getAll() //** THIS IS NOT WORKING **
            }.persister(
                reader = provideUserDAO(get())::getAll,
                writer = provideUserDAO(get())::insert
            )
        }
    }
}

@Dao
interface UserDao {
    @Query("SELECT * FROM UserDTO")
    suspend fun getAll(): List<UserDto>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(vararg userDTO: UserDto)
}
interface UserService {
    @GET("/users")
    suspend fun getAll(): List<User>
}
@Parcelize
data class User(val id: Int, val name: String, val username: String, val email: String) : Parcelable
android kotlin repository dropbox store
1个回答
0
投票

这是密钥描述:

商店使用通用密钥作为数据标识符。键可以是正确实现toString(),equals()和hashCode()的任何值对象。调用Fetcher函数时,它将传递一个特定的Key值。同样,该键将用作缓存中的主要标识符(请确保具有正确的hashCode()!)。

键是定义数据,用作键的对象必须重写hashCode方法,定义自己的规则。

这在商店中有一些用途:

suspend fun Store.get(key:Key):Value:此方法返回给定键的单个值。如果可用,它将从内存缓存或持久性中返回

它是根据您设置的键返回数据的。它的功能是hashmap

中的键
© www.soinside.com 2019 - 2024. All rights reserved.