java.lang.IllegalArgumentException:在触发get请求时,主机名不能为null

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

我会感谢你在这方面的帮助,下面是我试图执行的代码,但我得到的只是这个例外,我做了很多更改,但无法解决这个问题

请让我知道如果你有任何的指针,我在安卓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/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-eu­west­1.amazonaws.com/developer-application­test/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();
}