0

我正在使用 HttpGet 来获取一些图像的内容。它运行良好,但现在我使用的新服务器出现错误,该服务器以以下形式返回图像:

https://amx-sfs.qpass.com/d/da/207b3f6f-4fda-4faf-b7ae-a186530e1245

错误是主机名可能不为空

我进行了研究,似乎当 URL 上出现下划线时错误很常见,但是我的 URL 只包含我认为 URI 接受的连字符。无论如何,我也尝试使用以下方法来转义 url,但没有成功:

HttpGet mHttpGet = new HttpGet(new URI(null,item.getImageUrl(),null));

还有什么可能导致问题,我该如何解决?

提前致谢

编辑

我首先尝试使用 Url 直接使用

new HttpGet(item.getImageUrl())

然后我也尝试了 4 个参数:

HttpGet mHttpGet = new HttpGet(new URI("https","amx-sfs.qpass.com",item.getImageUrl().substring(25),null));

结果相同,即使我调试 HttpGet 对象,并观察它具有的 URI 对象,主机属性似乎 ok (amx-sfs.qpass.com) ,但我仍然得到相同的异常。

4

4 回答 4

0

我认为您使用了错误的构造函数。三参数 URI 构造函数具有以下签名:

public URI(String scheme, String ssp, String fragment)

但是您提供的是 URL 作为第二个参数,而不是 SSP。我认为您应该使用将 URL 字符串作为其参数的一个参数构造函数。

于 2012-05-11T17:12:15.340 回答
0

好吧,没有Java或Android问题,它导致服务器在请求来自设备时更改了请求......

于 2012-05-11T20:37:56.877 回答
0

您是否对 URI 进行了编码?例如删除空格或其他破坏东西的特殊字符?试试 android.net.Uri.encode(String s)

HttpGet mHttpGet = new HttpGet(new URI(null,android.net.Uri.encode(item.getImageUrl()),null));

调试此问题的最佳方法是始终打印 URL 并分析给出错误的 URL。

于 2012-05-11T16:05:30.253 回答
-1

请尝试不使用连字符“-”或下划线“_”的主机名,看看它是否有效。

于 2013-10-23T06:19:02.337 回答