Android: IllegalStateException in HttpGet

I am trying to send a GET request using HttpClient , but I keep getting IllegalStateException . Any idea what causes this? I was looking for a solution, but I do not understand what this means "host=null" in the log. How to install a host and how does it differ from the path? Here is my logcat out:

 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) 

and source:

 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(); } 
+1
source share
4 answers

I think you need to use .addHeader for HttpGet, for example, to transfer data in Json format:

 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; } } 

I also suggest that you use timeoutConnection (before establishing a connection) and timeoutSocket (timeout to wait for data.) For more information: Java jersey RESTful webservice requests

Also note that you need to implement a network connection in a separate thread for API level 11 or higher.

+1
source

you need to add http:// to the address in order to make it work. Avoid using URLEncoder if you do.

+5
source

When you do this:

 HttpGet getData = new HttpGet(this.address); 

What is this.address ? I assume it is String , if it should look like this:

 String address = "http://www.google.com/path/to/document"; 

You may have done this:

 String address = "google.com"; 
+2
source

This is your host error. You transmit "www.host.com", instead you need to transfer " http://www.w3schools.com "

link here

+1
source

Source: https://habr.com/ru/post/922855/


All Articles