在SharePreferences中保存API调用响应

时间:2019-11-25 10:43:04

标签: android json caching sharedpreferences android-volley

简短的问题:是否可以将从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加载。

2 个答案:

答案 0 :(得分:2)

我的建议是使用RetrofitVolley之类的内置库中可用的标准缓存技术。

希望您会在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字符串