Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.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 具有不同本地和远程行为的存储库模式_Android_Architecture_Repository Pattern - Fatal编程技术网

Android 具有不同本地和远程行为的存储库模式

Android 具有不同本地和远程行为的存储库模式,android,architecture,repository-pattern,Android,Architecture,Repository Pattern,我有一个问题需要回答 我第一次尝试实现Repository模式,我成功地在项目的大部分部分实现了它,但现在我不知道如何解决这个问题 基本上我需要更新用户的图片,所以在我的存储库中我有一个 updatePicture(userId: Int, picture: File) 接口,对于存储库实现和远程数据源实现来说一切都很好,但是您知道,本地数据源不使用文件来表示用户的图片,而是使用url字符串,因此在本地数据源中,接口应该是 updatePicture(userId: Int, picture

我有一个问题需要回答

我第一次尝试实现Repository模式,我成功地在项目的大部分部分实现了它,但现在我不知道如何解决这个问题

基本上我需要更新用户的图片,所以在我的存储库中我有一个

updatePicture(userId: Int, picture: File) 
接口,对于存储库实现和远程数据源实现来说一切都很好,但是您知道,本地数据源不使用文件来表示用户的图片,而是使用url字符串,因此在本地数据源中,接口应该是

updatePicture(userId: Int, picture: String)
但由于存储库的概念使本地数据源实现了与远程数据源相同的接口,我不知道如何解决这个问题


感谢您的帮助

您可以将签名更改为使用
Uri
而不是
文件

// Instead of this:
updatePicture(userId: Int, picture: File)

// Use this:
updatePicture(userId: Int, picture: Uri)

这应该是可行的,因为
Uri
可以使用不同的方案表示来自各种地方的资源。例如,您可以使用
file://...
URI和一个远程资源,可以使用HTTP和
https://...

这是两个不同的用例。这些方法实现了不同的目的,因此应该是不同的方法:picID=uploadPicture(picture:File),用于上载图片并为其分配ID;updateUserPictureReference(userId:int,picID:int),用于为用户分配该图片ID。这使您可以更轻松地将同一张图片分配给多个用户(即默认配置文件图片),或恢复到以前使用的图片


顺便说一句,我不会直接将URI分配给用户,因为这会将您锁定到当前目录结构中。分配一个Id,并在运行时使用该Id构建一个可预测的URI。如果您稍后决定重新构建站点,因为您获得了如此成功,您需要移动它们以提高性能,那么您可以轻松地执行此操作。如果数据库中有URI,则必须更新相应的数据。这也使得调试更容易,因为在开发过程中,您可以让所有链接指向一个URL,而在生产过程中,它们指向其他地方。

对不起,我需要更多的信息。我知道您有一个存储库接口和两个具体实现,一个用于执行网络请求并在服务器端更新图片,另一个存储库使用本地缓存(我假设它使用数据库、Room、ORMlite、Real等)。我明白你的意思,但问题是,当你做请求时,你应该在存储库实现中内部更新你的应用的缓存。请指定调用这两个方法的流程。您可以拥有缓存存储库、网络存储库和复合存储库(其中包含这些存储库的两个实例),然后执行网络请求并更新应用程序的缓存。但是我需要知道如何调用
updatePicture
方法。当您从网络存储库点击
updatePicture
方法时,是否正在尝试从缓存存储库调用
updatePicture
方法?谢谢,这很有帮助:)