Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:HttpGet中的IllegalStateException_Android_Apache Httpclient 4.x - Fatal编程技术网

Android:HttpGet中的IllegalStateException

Android:HttpGet中的IllegalStateException,android,apache-httpclient-4.x,Android,Apache Httpclient 4.x,我试图使用HttpClient发送GET请求,但我一直收到一个非法状态异常。知道是什么引起的吗?我一直在寻找一个解决方案,但我没有在日志中找到host=null的含义。如何设置主机,它与路径有何不同?这是我的日志: 07-17 11:54:18.002: W/System.err(15422): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, hos

我试图使用HttpClient发送GET请求,但我一直收到一个非法状态异常。知道是什么引起的吗?我一直在寻找一个解决方案,但我没有在日志中找到host=null的含义。如何设置主机,它与路径有何不同?这是我的日志:

07-17 11:54:18.002: W/System.err(15422): java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=google.com
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.AbstractHttpClient$1.executeRequestSending(AbstractHttpClient.java:609)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSendingUsual(NafRequestExecutorWrapperRedirectionHandler.java:96)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.naf.redirect.NafRequestExecutorWrapperRedirectionHandler.executeRequestSending(NafRequestExecutorWrapperRedirectionHandler.java:73)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.sendFirstRequest(NafHttpAuthStrategyDefault.java:487)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecutionUnsafe(NafHttpAuthStrategyDefault.java:388)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.naf.auth.NafHttpAuthStrategyDefault.performAuthExecution(NafHttpAuthStrategyDefault.java:200)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:558)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:508)
07-17 11:54:18.002: W/System.err(15422):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:486)
07-17 11:54:18.002: W/System.err(15422):    at myapp.httprequest.free.GETActivity$1sendRequestTask.doInBackground(GETActivity.java:102)
07-17 11:54:18.002: W/System.err(15422):    at myapp.httprequest.free.GETActivity$1sendRequestTask.doInBackground(GETActivity.java:1)
07-17 11:54:18.002: W/System.err(15422):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
07-17 11:54:18.002: W/System.err(15422):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-17 11:54:18.002: W/System.err(15422):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-17 11:54:18.002: W/System.err(15422):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-17 11:54:18.002: W/System.err(15422):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-17 11:54:18.002: W/System.err(15422):    at java.lang.Thread.run(Thread.java:856)
资料来源:

HttpClient getClient = new DefaultHttpClient();
HttpGet getData = new HttpGet(this.address);
try {
    HttpResponse gameResponse = getClient.execute(getData);
    return EntityUtils.toString(gameResponse.getEntity());
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (IllegalStateException e) {
    e.printStackTrace();
}
执行此操作时:

HttpGet getData = new HttpGet(this.address);
这是什么地址?我假设它是一个字符串,如果是这样,它需要如下所示:

String address = "http://www.google.com/path/to/document";
您可能已经这样做了:

String address = "google.com";
执行此操作时:

HttpGet getData = new HttpGet(this.address);
这是什么地址?我假设它是一个字符串,如果是这样,它需要如下所示:

String address = "http://www.google.com/path/to/document";
您可能已经这样做了:

String address = "google.com";

您必须添加http://to地址才能使其工作。如果需要,请避免使用。

您必须添加http://to地址,才能使其正常工作。如果需要,请避免使用。

我认为您需要使用.addHeader for HttpGet,例如以Json格式传输数据:

public class Client {

    private String server;

    public Client(String server) {
        this.server = server;
    }

    private String getBase() {
        return server;
    }

    public String getBaseURI(String str) {
        String result = "";
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet getRequest = new HttpGet(getBase() + str);
            getRequest.addHeader("accept", "application/json");
            HttpResponse response = httpClient.execute(getRequest);
            result = getResult(response).toString();
            httpClient.getConnectionManager().shutdown();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    private StringBuilder getResult(HttpResponse response) throws IllegalStateException, IOException {

        StringBuilder result = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())), 1024);
        String output;
        while ((output = br.readLine()) != null) 
            result.append(output);
        return result;
    }
}
我还建议您在建立连接之前使用timeoutConnection,并在等待数据时使用timeoutSocket timeout。有关更多信息,请参阅:


还请注意,对于API级别11或更高版本,您需要在单独的线程上实现网络连接。

我认为您需要使用.addHeader for HttpGet,例如,以Json格式传输数据:

public class Client {

    private String server;

    public Client(String server) {
        this.server = server;
    }

    private String getBase() {
        return server;
    }

    public String getBaseURI(String str) {
        String result = "";
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet getRequest = new HttpGet(getBase() + str);
            getRequest.addHeader("accept", "application/json");
            HttpResponse response = httpClient.execute(getRequest);
            result = getResult(response).toString();
            httpClient.getConnectionManager().shutdown();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    private StringBuilder getResult(HttpResponse response) throws IllegalStateException, IOException {

        StringBuilder result = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())), 1024);
        String output;
        while ((output = br.readLine()) != null) 
            result.append(output);
        return result;
    }
}
我还建议您在建立连接之前使用timeoutConnection,并在等待数据时使用timeoutSocket timeout。有关更多信息,请参阅:


还请注意,对于API级别11或更高版本,您需要在单独的线程上实现网络连接。

这是您的主机错误,您要通过www.Host.com,而必须通过


参考帖子是

这是您的主机错误,您正在通过www.Host.com,而您必须通过


参考帖子是

这个地址的价值是什么?这个地址的价值是什么?是的,我就是这么做的。谢谢是的,我就是这么做的。谢谢