OkHttp + Picasso + Retrofit

6

问题是如何将这3个库合并到一个项目中?

  • 创建一个OkHttpClient作为Picasso和Retrofit的后台层。
  • 如何进行优先级更改(如Volley库中的分页)?

1
"问题是如何将这3个库组合成一个项目?" - 下载这三个JAR文件及其依赖项(例如GSON),或在Gradle或Maven构建中引用这三个工件。 "使一个OkHttpClient成为Picasso和Retrofit的后台层。" - 据我所知,Retrofit和Picasso将自动使用OkHttp。 "如何进行优先级更改,就像Volley库一样。(用于分页)" - 请详细解释您在此处的问题是什么,以及"优先级更改"与"分页"有何关系。 - CommonsWare
当使用Retrofit时,我必须手动创建一个OkClient,该客户端在构造函数中需要一个OkHttpClient。但是我不知道这两个库是否会使用相同的OkHttpClient作为后台,因此我是否需要为Picasso创建自己的OkHttpClient。分页和优先级怎么样: 当您滚动项目列表并接近页面末尾时,应下载N个更多项目,并且在Volley中,用于下载新项目的请求具有最高优先级,当图像变少时。因此,当加载新项目到列表中时,它们将立即下载。 - Alex
2个回答

20

简而言之:

OkHttpClient okHttpClient = new OkHttpClient();
RestAdapter restAdapter = new RestAdapter.Builder().setClient(new OkClient(okHttpClient)).build();
OkHttpDownloader downloader = new OkHttpDownloader(okHttpClient);
Picasso picasso = new Picasso.Builder(this).downloader(downloader).build();

我不认为在当前版本的Retrofit中有可能设置优先级。


如何为Retrofit和Picasso使用两个不同的缓存目录?除了使用两个OkHttpClient实例之外,还有其他方法吗? - Pratap Patil

8

对于OkHttpClient 3.0和Retrofit 2.0,做法如下:

OkHttpClient client = new OkHttpClient.Builder()
    .cache(cache) // optional for adding cache
    .networkInterceptors().add(loggingInterceptor) // optional for adding an interceptor
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://api.yourdomain.com/v1/")
    .addConverterFactory(GsonConverterFactory.create())
    .client(client)
    .build();

Picasso picasso = Picasso.Builder(context)
    .downloader(new OkHttp3Downloader(client))
    .build();

优先级已经被移动到HTTP客户端的堆栈模型中,目前正在研究一个问题:https://github.com/square/okhttp/issues/1361


1
不要忘记在 build.gradle 中添加 compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.0.2' - CoolMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接