Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我将使用什么样的密钥来创建此StoreBuilder_Android_Kotlin_Repository_Dropbox_Store - Fatal编程技术网

Android 我将使用什么样的密钥来创建此StoreBuilder

Android 我将使用什么样的密钥来创建此StoreBuilder,android,kotlin,repository,dropbox,store,Android,Kotlin,Repository,Dropbox,Store,因此,我正在试用Store4(),它使用一个简单的android应用程序从这个占位符站点获取数据: 第一个屏幕是所有用户的列表。我想在您第一次打开应用程序时获取它们。但是,当你重新打开应用程序或回到第一个屏幕时,我希望先从房间数据库获取应用程序,然后再从互联网获取它们(数据库没有改变这一事实是微不足道的) 我希望我的ViewModel需要接受StoreBuilder创建的对象,因此我正在DI(Koin)中创建该对象的定义。不过StoreBuilder一直要求我提供一把钥匙。我开始怀疑,如果你要获

因此,我正在试用Store4(),它使用一个简单的android应用程序从这个占位符站点获取数据:

第一个屏幕是所有用户的列表。我想在您第一次打开应用程序时获取它们。但是,当你重新打开应用程序或回到第一个屏幕时,我希望先从房间数据库获取应用程序,然后再从互联网获取它们(数据库没有改变这一事实是微不足道的)

我希望我的ViewModel需要接受StoreBuilder创建的对象,因此我正在DI(Koin)中创建该对象的定义。不过StoreBuilder一直要求我提供一把钥匙。我开始怀疑,如果你要获取所有用户,商店不是正确的选择。我试图在我的程序中使用Store,因为我对它感兴趣。我的问题是,怎么做?或者简单地说:

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

到目前为止,我的代码的小片段(不是它构建的):


这是描述以下内容的关键:

存储使用通用键作为数据的标识符。键可以是正确实现toString()、equals()和hashCode()的任何值对象。当调用Fetcher函数时,它将被传递一个特定的键值。类似地,密钥将用作缓存中的主标识符(确保具有正确的hashCode()!!)

关键是定义数据,作为关键的对象必须覆盖
hashCode
方法,定义自己的规则

以下是商店中的一些用途:

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


根据您设置的键返回数据。它的功能是作为hashmap中的键,好的,那么我应该在每次尝试获取所有用户时生成一个随机整数吗?似乎我有义务用一个特定的变量(比如ID)获取我的用户,但在这种情况下,我想从一个特定的地址获取所有用户。我建议您使用唯一和固定的数据作为键,而不是随机整数。所有的用户键都可以像这个“all+usertype函数”,这意味着我的dao中有一个insert函数,它也应该接受一个字符串,该字符串总是包含一个任意字符串,比如“all+usertype函数”?听起来像是坏代码。这是我可以为之打开问题的地方吗?
一个键可以是任何正确实现toString()的值对象。
,我只显示id的示例信息,对于数据库,它通常使用rawid作为唯一键
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