简短的问题:是否可以将从API调用返回的JSONString存储在Sharepreferences中,并用于以后使用(以及更快的活动加载),还是应该实现某种缓存方法?
如果在服务器上更改了数据,则PS共享首选项将使用新的JSONString更新。
长问题: 我已经在Android上开发了一个应用程序,正在使用一些在线数据源。使用Volley,我正在进行API调用并以JSONString形式获取响应。
因此应用程序的工作流程是这样的:用户打开应用程序,并触发了API调用以从服务器获取新数据,API大约需要2到5秒钟才能获得响应。现在,有时延迟是2-5秒的两倍,并且用户无法在获取数据并可用之前执行任何操作。简而言之,在加载微调器的情况下,用户会在空白屏幕上停留5秒钟(BAD USER EXPERIENCE)。为避免此延迟,我将服务器的响应保存到Sharepreferences并在后台执行API调用时本地加载数据。现在,当API调用从服务器返回新数据时,只有更改了数据,我才会更新Shareprefs,并显示吐司/弹出窗口,并带有诸如“立即刷新”之类的字符串。
我的问题是,可以使用shareprefes存储此类数据,还是应该使用某种缓存方法来存储和查看数据。
数据主要是字符串,没有图像或图标,因此即使没有可用的互联网,我也可以从sharedprefs加载。
答案 0 :(得分:2)
我的建议是使用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
答案 1 :(得分:0)
在共享首选项中存储JSON响应是一种不好的做法。您可以使用缓存机制进行存储。
此外,SharedPreference每个值的限制为8192个字符。因此,不希望存储json字符串