java.lang.IllegalArgumentException:在触发get请求时,主机名不能为null
我会感谢你在这方面的帮助,下面是我试图执行的代码,但我得到的只是这个例外,我做了很多更改,但无法解决这个问题 请让我知道如果你有任何的指针,我在安卓4.4.4上运行java.lang.IllegalArgumentException:在触发get请求时,主机名不能为null,java,android,apache,http,Java,Android,Apache,Http,我会感谢你在这方面的帮助,下面是我试图执行的代码,但我得到的只是这个例外,我做了很多更改,但无法解决这个问题 请让我知道如果你有任何的指针,我在安卓4.4.4上运行 HttpGet request = new HttpGet("https://s3-eu-west-1.amazonaws.com/developer-application-test/cart/list"); resp = client.execute(request); 01-22 22:25:03.885: W/Sy
HttpGet request = new HttpGet("https://s3-eu-west-1.amazonaws.com/developer-application-test/cart/list");
resp = client.execute(request);
01-22 22:25:03.885: W/System.err(14697): java.lang.IllegalArgumentException: Host name may not be null
01-22 22:25:03.886: W/System.err(14697): at org.apache.http.HttpHost.<init>(HttpHost.java:83)
01-22 22:25:03.886: W/System.err(14697): at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:508)
01-22 22:25:03.886: W/System.err(14697): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:498)
01-22 22:25:03.886: W/System.err(14697): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:476)
HttpGet请求=新的HttpGet(“https://s3-欧盟-西部-1.amazonaws.com/developer application-test/cart/list);
resp=客户端执行(请求);
01-22 22:25:03.885:W/System.err(14697):java.lang.IllegalArgumentException:主机名不能为空
01-22 22:25:03.886:W/System.err(14697):位于org.apache.http.HttpHost.(HttpHost.java:83)
01-22 22:25:03.886:W/System.err(14697):位于org.apache.http.impl.client.AbstractHttpClient.DeterminateTarget(AbstractHttpClient.java:508)
01-22 22:25:03.886:W/System.err(14697):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:498)
01-22 22:25:03.886:W/System.err(14697):位于org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:476)
出现问题是因为您的URL检查您的URL
“https://s3…eu-west-1.amazonaws.com/developer-application-test/cart/list“
正如@atish shimpi所提到的,这很可能是由于URL格式不正确造成的。我在一部开发手机上输入了以下截取并调试的代码:
HttpClient httpClient = new DefaultHttpClient();
URI url = new URI("https://s3-euwest1.amazonaws.com/developer-applicationtest/cart/list");
URI url1 = new URI("https://www.google.com/");
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
如您所见,我添加了另一个URI
对象,该对象指向https://www.google.com/
用作比较。调试时,我在创建两个URI
对象时设置断点。为您提供的地址创建相应的URI
对象后,host
字段为null
但是,当我为Google地址创建一个类似的URI
对象时,host
字段不是null
,这意味着您的地址有问题
我仍然不太清楚为什么方法URI(字符串规范)
无法解析正确的字段。这可能是一个bug,也可能只是与您的特定URL相关。不管怎样,我最终能够通过获取您提供的链接并手动创建URI
对象来处理请求,如下所示:
URI uri = new URI("https", "s3-eu-west-1.amazonaws.com", "/developer-application-test/cart/list", null, null);
使用这个手动创建的URI
,我可以下载您创建的列表:
"products" : [
{
"product_id" : "1",
"name" : "Apples",
"price" : 120,
"image" : "https://s3-eu-west-1.amazonaws.com/developer-application-test/images/1.jpg"
},
{
"product_id" : "2",
"name" : "Oranges",
"price" : 167,
"image" : "https://s3-eu-west-1.amazonaws.com/developer-application-test/images/2.jpg"
},
{
"product_id" : "3",
"name" : "Bananas",
"price" : 88,
"image" : "https://s3-eu-west-1.amazonaws.com/developer-application-test/images/3.jpg"
},
etc....
作为参考,以下是我的最终工作代码:
try
{
HttpClient httpClient = new DefaultHttpClient();
URI uri = new URI("https", "s3-eu-west-1.amazonaws.com", "/developer-application-test/cart/list", null, null);
HttpGet httpGet = new HttpGet(uri);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null)
{
InputStream inputStream = httpEntity.getContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String currentLine = null;
while ((currentLine = bufferedReader.readLine()) != null)
{
stringBuilder.append(currentLine + "\n");
}
String result = stringBuilder.toString();
Log.v("Http Request Results:",result);
inputStream.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
我的错我更新了我的问题,我粘贴了正确的url,但格式化了删除的连字符。@Techfist所以即使问题中有正确的url,您仍然会出现相同的错误?很好的解决方法,尽管最初的问题仍然奇怪且未解决。错误报告?这太愚蠢了,一部分一部分地生成URI确实有助于正确地获取URI,但在一次性系统中仍然无法正确解析URI。运气不好吗?你还有同样的问题吗?我们有同样的问题。这似乎是一个“-”和“-”的问题。我们用一个更简单的url创建了一个新的vhost,这个问题消失了。注意:这不是一个解决方案。我只是想找出原因。
try
{
HttpClient httpClient = new DefaultHttpClient();
URI uri = new URI("https", "s3-eu-west-1.amazonaws.com", "/developer-application-test/cart/list", null, null);
HttpGet httpGet = new HttpGet(uri);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null)
{
InputStream inputStream = httpEntity.getContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String currentLine = null;
while ((currentLine = bufferedReader.readLine()) != null)
{
stringBuilder.append(currentLine + "\n");
}
String result = stringBuilder.toString();
Log.v("Http Request Results:",result);
inputStream.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}