Java.net.ProtocolException: Too many redirects: 21 Android applications

Hi, I had a problem that my application is so slow with this error:

java.net.ProtocolException: Too many redirects: 21

Now I don’t know why it is slow and gets an error, the only thing the website does is open the php document and run the bash command. :( therefore it should redirect only 1 time

Thank:)

I will turn on the light using the button in the application:

    public void switchLightOn(View view) {
    Context context = getApplicationContext();
    int duration = Toast.LENGTH_SHORT;
    CharSequence text = "An";
    Toast.makeText(context, text, duration).show();

    URL url11 = null;
    try {
        url11 = new URL("http://192.168.2.104/homepage/steuerung/steckdosen.php?id=1&status=1");
    } catch (Exception e) {
        e.printStackTrace();
    }
    new OpenUrlConnection().execute(url11);

}

public void switchLightOff(View view) {
    // ausschalten
    Context context = getApplicationContext();
    CharSequence text = "Aus";
    int duration = Toast.LENGTH_SHORT;
    Toast.makeText(context, text, duration).show();

    URL url10 = null;
    try {
        url10 = new URL("http://192.168.2.104/homepage/steuerung/steckdosen.php?id=1&status=0");
    } catch (Exception e) {
        e.printStackTrace();
    }

    new OpenUrlConnection().execute(url10);

}

private class OpenUrlConnection extends AsyncTask<URL, Void, Integer> {

    public Integer doInBackground(URL... urls) {
            try {
                HttpURLConnection urlConnection = (HttpURLConnection) urls[0].openConnection();
                InputStream in = urlConnection.getInputStream();
                InputStreamReader isw = new InputStreamReader(in);
            } catch (Exception e) {
                e.printStackTrace();
            }
        return 1;
    }
}

EDIT:

now i use:

                    HttpClient httpclient = new DefaultHttpClient();
                HttpGet httpget = new HttpGet(String.valueOf(urls[0]));
                HttpResponse response = httpclient.execute(httpget);
                httpclient.getConnectionManager().shutdown();

but get the following errors:

05-06 18:10:36.803  30939-31047/de.carsten.raspicontrol D/dalvikvm﹕ GC_FOR_ALLOC freed 239K, 2% free 17052K/17324K, paused 10ms, total 10ms
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ org.apache.http.client.ClientProtocolException
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at de.carsten.raspicontrol.RasPiControl$OpenUrlConnection.doInBackground(RasPiControl.java:103)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at de.carsten.raspicontrol.RasPiControl$OpenUrlConnection.doInBackground(RasPiControl.java:97)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ Caused by: org.apache.http.client.CircularRedirectException: Circular redirect to 'http://192.168.2.104/homepage/steuerung/steckdosen.php?id=1&status=0'
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.DefaultRedirectHandler.getLocationURI(DefaultRedirectHandler.java:173)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.handleResponse(DefaultRequestDirector.java:923)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:475)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
05-06 18:10:38.163  30939-31047/de.carsten.raspicontrol W/System.err﹕ ... 10 more
+4
source share
3 answers

Android- - , . , , URL- . , .

, , . - , , URL- .

+4

HttpClient

org.apache.http.client.HttpClient

HttpURLConnection

HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true); 
HttpPost httpPost = new HttpPost("http:\\www.myweb.com"); 
HttpResponse response = httpclient.execute(httppost); 
responseBody = "";
BufferedReader buffer = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String s = "";
while ((s = buffer.readLine()) != null) 
  responseBody += s;
+2

. , . , : JSON, , application/json. , .openConnection() InputStreamReader JSON. , , .

  • HttpClient httpClient = new DefaultHttpClient(); (HttpURLConnection) obj.openConnection();

  • : httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);

  • , .

    httpPost.setHeader("charset","utf-8"); 
    httpPost.setHeader("Accept", "application/json"); 
    httpPost.setHeader("Accept-Language","en-US,en;q=0.8");
    httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); 
    
  • StringEntity

  • UTF-8:

    httpresponse.getEntity().getContent(),HTTP.UTF_8), 8); 
    

, :

HttpClient httpClient = new DefaultHttpClient(); 
String url =http://....;
httpClient.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true); 
HttpPost httpPost = new HttpPost(url); 
httpPost.setHeader("Content-Type", "application/json"); 
httpPost.setHeader("charset","utf-8"); 
httpPost.setHeader("Accept", "application/json"); 
httpPost.setHeader("Accept-Language","en-US,en;q=0.8");
httpPost.setHeader("Content-Type", "application/json;charset=UTF-8"); 
//or you can try httpPost.setContentType("application/x-www-form-urlencoded"); 
StringEntity requestBody = new StringEntity(jsonBody);
requestBody.setContentType("application/json");
httpPost.setEntity(requestBody); HttpResponse httpresponse = httpClient.execute(httpPost); 
org.apache.http.StatusLine statusRespons = httpresponse.getStatusLine(); 
if ( statusRespons.getStatusCode() > 201 ) { 
    errorText = statusRespons.getStatusCode() + " : " + statusRespons.toString() + " : " +statusRespons.getReasonPhrase() ; 
} 
BufferedReader buffer = new BufferedReader(new InputStreamReader(httpresponse.getEntity().getContent(),HTTP.UTF_8), 8); 
String s = ""; while ((s = buffer.readLine()) != null) 
jsonString.append(s);
+1

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


All Articles