简短的问题:是否可以将从应用程序接口调用返回的JSONString存储在Sharepreferences中以供以后使用(以及更快的活动加载),或者我是否应该实现某种缓存方法?
如果服务器上的数据发生更改,P.S Shareprefeferences将使用新的JSONString进行更新。
一个很长的问题:我在Android上开发了一个应用程序,其中我使用了一些在线资源来获取数据。使用Volley,我进行了API调用并获得了JSONString格式的响应。
因此,应用程序的工作流程是这样的,用户打开应用程序,并触发API调用以从服务器获取新数据,API需要2-5秒才能获得响应。现在,有时延迟是2-5秒的两倍,用户在数据获取和可用之前不能做任何事情。简而言之,用户在带有加载旋转器的空白屏幕上停留了5秒(糟糕的用户体验)。为了避免这种延迟,我将来自服务器的响应保存到Sharepreferences,并在API调用在后台执行时在本地加载数据。现在,当API调用从服务器返回新的数据时,只有当数据发生更改时,我才会更新Sharepref,并且会显示一个带有类似"refresh now“的字符串的toast/弹出窗口。
我的问题是,是否可以使用shareprefes来存储此类数据,或者我是否应该使用某种缓存方法来存储和查看数据。
数据主要是字符串,没有图像或图标,所以即使没有可用的互联网,我也可以从sharedpref加载。
发布于 2019-11-25 18:57:40
我的建议是使用内置库中提供的标准缓存技术,如Retrofit或Volley。
我希望您将使用它们中的任何一个来进行API调用,这里有一个在Retrofit中执行此操作的小示例
int cacheSize = 10 * 1024 * 1024; // 10 MB
Cache cache = new Cache(getCacheDir(), cacheSize);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.cache(cache)
.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:3000/")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build(); 对于Volley中的缓存,您可以参考Android set up Volley to use from cache
发布于 2019-11-25 18:57:14
将JSON响应存储在共享首选项中是一种糟糕的做法。您可以使用缓存机制来存储它。
除此之外,SharedPreference对每个值都有8192个字符的限制。因此,最好不要存储json字符串。
https://stackoverflow.com/questions/59029958
复制相似问题