android - 使用 OkHTTP 的 Picasso 无法加载其 URL 中包含竖线字符 ("|") 的图像
android - Picasso with OkHTTP can not load images containing vertical bar character ( "|" ) in their URL
我在项目中使用 Picasso 和 MapBox。只要 MapBox 的依赖项中有 OkHTTP,我就不得不使用 OkHTTP。
但是当我将 OkHTTP 添加到 gradle 依赖项时,Picasso 无法加载在其 URL.
中包含竖线字符 ("|") 的图像
没有 OkHTTP:
Picasso.with(context).load("http://example.com/image.jpg").into(imageView); //OK
Picasso.with(context).load("http://example.com/image.jpg|100:100").into(imageView); //OK
使用 OkHTTP:
Picasso.with(context).load("http://example.com/image.jpg").into(imageView);
//09-01 19:07:35.280 24916-24916/com.test D/Picasso﹕ Main errored [R6]+287ms
Picasso.with(context).load("http://example.com/image.jpg|100:100").into(imageView); //OK
所以,我的问题是:如果另一个库需要 OkHTTP,如何避免将 OkHTTP 与 Picasso 一起使用,或者如何解决此问题并继续使用 OkHTTP?
试试 OkHttp 2.5.0。它支持包含 |
字符的 URL。
我已经通过在 MyApplication.onCreate()
方法中添加下一个代码解决了这个问题:
Picasso picasso = new Picasso.Builder(getApplicationContext())
.requestTransformer(new Picasso.RequestTransformer() {
@Override
public Request transformRequest(Request request) {
Uri oldImageUri = request.uri;
Uri newImageUri = oldImageUri.buildUpon().query(oldImageUri.getEncodedQuery()).build();
return request.buildUpon().setUri(newImageUri).build();
}
}).build();
picasso.setLoggingEnabled(true);
Picasso.setSingletonInstance(picasso);
我刚开始使用OkHttp的时候遇到了同样的问题。问题似乎是必须对竖线字符进行编码。只需用编码值 (%7C) 替换它,它应该可以正常工作。在您的情况下,url 变为:
http://example.com/image.jpg%7C100:100
我在项目中使用 Picasso 和 MapBox。只要 MapBox 的依赖项中有 OkHTTP,我就不得不使用 OkHTTP。 但是当我将 OkHTTP 添加到 gradle 依赖项时,Picasso 无法加载在其 URL.
中包含竖线字符 ("|") 的图像没有 OkHTTP:
Picasso.with(context).load("http://example.com/image.jpg").into(imageView); //OK
Picasso.with(context).load("http://example.com/image.jpg|100:100").into(imageView); //OK
使用 OkHTTP:
Picasso.with(context).load("http://example.com/image.jpg").into(imageView);
//09-01 19:07:35.280 24916-24916/com.test D/Picasso﹕ Main errored [R6]+287ms
Picasso.with(context).load("http://example.com/image.jpg|100:100").into(imageView); //OK
所以,我的问题是:如果另一个库需要 OkHTTP,如何避免将 OkHTTP 与 Picasso 一起使用,或者如何解决此问题并继续使用 OkHTTP?
试试 OkHttp 2.5.0。它支持包含 |
字符的 URL。
我已经通过在 MyApplication.onCreate()
方法中添加下一个代码解决了这个问题:
Picasso picasso = new Picasso.Builder(getApplicationContext())
.requestTransformer(new Picasso.RequestTransformer() {
@Override
public Request transformRequest(Request request) {
Uri oldImageUri = request.uri;
Uri newImageUri = oldImageUri.buildUpon().query(oldImageUri.getEncodedQuery()).build();
return request.buildUpon().setUri(newImageUri).build();
}
}).build();
picasso.setLoggingEnabled(true);
Picasso.setSingletonInstance(picasso);
我刚开始使用OkHttp的时候遇到了同样的问题。问题似乎是必须对竖线字符进行编码。只需用编码值 (%7C) 替换它,它应该可以正常工作。在您的情况下,url 变为:
http://example.com/image.jpg%7C100:100