2015-09-01 14 views
1

我在我的项目中使用Picasso和MapBox。只要MapBox在其依赖项中有OkHTTP,我就不得不使用OkHTTP。 但是,当我将OkHTTP添加到gradle依赖关系时,Picasso无法加载其URL中包含竖线字符(“|”)的图像。android - 带有OkHTTP的毕加索无法在其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或如何解决此问题并继续使用OkHTTP?

回答

0

我已经在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); 
0

尝试OkHttp 2.5.0。它支持包含|字符的URL。

+0

谢谢,但它不起作用。 –

0

我有同样的问题,当我开始使用OkHttp。问题似乎是垂直栏字符必须被编码。只需将其替换为编码值(%7C)即可正常工作。在你的情况下,url变成:

http://example.com/image.jpg%7C100:100 
相关问题