首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将接口调用响应保存在SharePreferences中

将接口调用响应保存在SharePreferences中
EN

Stack Overflow用户
提问于 2019-11-25 18:43:04
回答 2查看 48关注 0票数 0

简短的问题:是否可以将从应用程序接口调用返回的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加载。

EN

回答 2

Stack Overflow用户

发布于 2019-11-25 18:57:40

我的建议是使用内置库中提供的标准缓存技术,如RetrofitVolley

我希望您将使用它们中的任何一个来进行API调用,这里有一个在Retrofit中执行此操作的小示例

代码语言:javascript
运行
复制
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

票数 2
EN

Stack Overflow用户

发布于 2019-11-25 18:57:14

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

除此之外,SharedPreference对每个值都有8192个字符的限制。因此,最好不要存储json字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59029958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档