当前位置: 首页 > 知识库问答 >
问题:

使用Regetfit,okhttp,picasso缓存图像和字符串

庄实
2023-03-14

我有机会使用Registfit、okhttp和Picasso作为一个单独的附加库,虽然我知道它们可以一起工作并同步,磁盘缓存至少可以通过其中的两个库(Picasso和okhttp)使用,但我不确定哪个库应该做哪个部分,以及如何将它们同步在一起。

我将感谢每一个提示/指导,谢谢前面。

共有1个答案

梁华清
2023-03-14

okhttp提供对缓存控制头的支持。我以前在一个应用程序中实现了它们,以便在网络不稳定时提供缓存,使用以下指南如下:

int cacheSize = 10 * 1024 * 1024; // 10 MiB
Cache cache = new Cache(cacheDirectory, cacheSize);

client = new OkHttpClient.Builder()
    .cache(cache)
    .build();

由于Regetfit在内部使用okhttp(如果您至少使用最新的),因此不为它配置任何缓存。只需使用您刚刚配置的okhttp客户端:

RestAdapter restAdapter = new RestAdapter.Builder()
        .setClient(new OkClient(client))
        .setServer("http://example.com")
        ...
        .build();

毕加索使用一些默认的缓存大小限制自动缓存图像。你可以改变毕加索的默认,我在这里和这里找到了一些答案。您可以在应用程序的oncreate中设置缓存大小:

Picasso.Builder builder = new Picasso.Builder(this);
        builder.downloader(new OkHttpDownloader(this,Integer.MAX_VALUE));
        Picasso picasso = builder.build();
        picasso.setIndicatorsEnabled(true);
        picasso.setLoggingEnabled(true);
        Picasso.setSingletonInstance(picasso);
Picasso.with(getApplicationContext())
                    .load(url)
                    .fetch();
 类似资料:
  • 我正试图优化这段代码以实现缓存的目的。此代码使缓存仅为1天之前,它重新连接到internet再次建立新的缓存。我想让它60天前,它再次访问网络,使新的缓存。此外,使用picasso对来自缓存的映像也会减慢picasso:2.5.2reverfit2:reverfit:2.7.2reverfit2:Converter-GSON:2.7.2OKHTTP3:OKHTTP:4.4.1OKHTTP3:Log

  • 我希望方法使用picasso从服务器加载图像,并且我希望显示一个进度条,直到照片完全下载完毕。下面是我的代码:

  • WordPress的示例短代码: 现在在上面的短代码中。代码中使用了一个图像。我想要获得图像,并在服务器中创建一个缓存,这样每个使用这个短代码的人都可以查看图像。目前,我正在使用base64编码的图像。

  • > 在iOS上,我广泛使用了AFNetworking项目。是否有一个与Android相当的库? 我已经阅读了OkHTTP和Square的改型,以及Volley,但还没有使用它们开发的经验。我希望有人能为每种情况提供一些最佳用例的具体例子。从我所读到的内容来看,OkHTTP似乎是三个中最健壮的,并且可以处理这个项目(上面提到的)的需求。

  • 我有一个简单的用例,服务器为请求返回Etag,并将该Etag作为标头(即)添加到所有后续url请求。如果响应中有变化,服务器可以用响应,否则可以用响应。对于后者,重用缓存中的响应是有意义的。但是okhttp总是返回作为缓存响应。 我做了一些故障排除,okhttp在内部将响应写入磁盘,但是不会将其返回到。仔细研究类,有一些文档明确说明不会使用缓存: 编辑-更正,Okhttp正确地添加了etag标头。

  • 问题内容: 注意:请没有库。 这对我来说很重要。另外,对此有各种各样的答案,但我发现没有一个能很好地解决该问题。请不要将其标记为重复项。提前致谢! 我的问题是,如果您在表中快速滚动,会看到旧图像并闪烁。 我所读问题的解决方案是取消 数据请求。但是我不知道如何在正确的时间和地点做到这一点。可能还有其他解决方案,但不确定。 这是我到目前为止的内容: 图像缓存类 用法 有什么想法吗? 问题答案: 几个问