如果url包含空格,毕加索不工作

时间:2016-09-19 05:18:19

标签: android url picasso

我正在开发一个Android应用程序,我在其中从服务器检索图像并使用Picasso在图像视图中显示它。即使我可以在浏览器中成功测试它们,一些图像URL也不起作用。

例如,此网址正常运行:

http://www.tonightfootballreport.com/\Filebucket\Picture\image\png\20160730011032_BPL.png

但是这个失败了:

http://www.tonightfootballreport.com/\Filebucket\Picture\image\png\20160807025619_Serie A.png

差异似乎是失败的URL包含空格。我需要做些什么来完成这项工作?

3 个答案:

答案 0 :(得分:10)

timeout = setTimeout(function(){
    document.getElementById('pop4').className = 'waa';
}, 2500);

success: function(data) {
            clearTimeout(timeout);
            window.location.href=window.location.href;

         }

答案 1 :(得分:7)

对网址进行编码,

String url = "http://www.tonightfootballreport.com/Filebucket/Picture/image/png/20160807025619_Serie A.png";
String encodedUrl = URLEncoder.encode(url, "utf-8");

编辑#1:

上述方法的问题如@Wai Yan Hein所指出的那样,它会对网址中的所有字符进行编码,包括协议。

以下代码解决了这个问题,

String urlStr = "http://www.tonightfootballreport.com/Filebucket/Picture/image/png/20160807025619_Serie A.png";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

编辑#2

使用Uri.parse

的替代解决方案
String urlStr = "http://www.tonightfootballreport.com/Filebucket/Picture/image/png/20160807025619_Serie A.png";
String url = Uri.parse(urlStr)
                .buildUpon()
                .build()
                .toString();

答案 2 :(得分:0)

检查网址是否确实有效,如果没有尝试编码,

if(!Patterns.WEB_URL.matcher(url).matches()){
            URLEncoder.encode(url, "utf-8");
            //Now load via Picasso
        }
else{
      //Proceed with loading via picasso
}