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

Wai*_*ein 4 url android picasso

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

例如,此URL可正常工作:

http://www.tonightfootballreport.com/\Filebucket\Picture\image\png\20160730011032_BPL.png
Run Code Online (Sandbox Code Playgroud)

但是这个失败了:

http://www.tonightfootballreport.com/\Filebucket\Picture\image\png\20160807025619_Serie A.png
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*kar 10

String temp = "http://www.tonightfootballreport.com/\Filebucket\Picture\image\png\20160807025619_Serie A.png";
temp = temp.replaceAll(" ", "%20");
URL sourceUrl = new URL(temp);
Run Code Online (Sandbox Code Playgroud)


K N*_*Lal 7

编码URL,

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

编辑#1:

上面的方法@Wai Yan Hein指出的问题是它编码url中的所有字符,包括协议.

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

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();
Run Code Online (Sandbox Code Playgroud)

编辑#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();
Run Code Online (Sandbox Code Playgroud)

  • 网址变得像这样,http%3A%2F%2Fwww.tonightfootballreport.com%2F%5CFilebucket%5CPicture%5Cimage%5Cpng%5C20160730011032_BPL.png并且都无效. (3认同)