繁体   English   中英

在 SharePreferences 中保存 API 调用响应

[英]Saving API Call Response in SharePreferences

小问题:是否可以在 Sharepreferences 中存储从 API 调用返回的 JSONString 并将其用于以后使用(和更快的活动加载),或者我应该实现某种缓存方法吗?

如果服务器上的数据发生更改,PS Sharepreferences 将使用新的 JSONString 进行更新。

长问题:我在 Android 上开发了一个应用程序,我正在使用一些在线数据源。 使用 Volley,我进行 API 调用并在 JSONString 中获取响应。

所以应用程序的工作流程是这样的,用户打开应用程序并触发 API 调用以从服务器获取新数据,API 需要 2 - 5 秒才能获得响应。 现在有时延迟会增加一倍 2-5 秒,用户在获取数据并可用之前无法做任何事情。 简而言之,用户在加载微调器的空白屏幕上停留了 5 秒钟(糟糕的用户体验)。 为了避免这种延迟,我将来自服务器的响应保存到 Sharepreferences 并在后台执行 API 调用时在本地加载数据。 现在,当 API 调用从服务器返回新数据时,仅当数据发生更改时,我才会更新 Shareprefs 并显示一个带有诸如“立即刷新”之类的字符串的吐司/弹出窗口。

我的问题是可以使用 shareprefes 来存储这种数据,还是应该使用某种缓存方法来存储和查看数据。

数据主要是字符串,没有图像或图标,因此即使没有互联网可用,我也可以从 sharedprefs 加载。

我的建议是使用内置库(如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 设置 Volley 以从缓存中使用

在共享首选项中存储 JSON 响应是一种不好的做法。 您可以使用缓存机制来存储它。

除此之外,SharedPreference 对每个值的限制为 8192 个字符。 因此不推荐存储 json 字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM