1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

HttpClient timout

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von GENiALi, 25.05.2012.

  1. GENiALi, 25.05.2012 #1
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    10
    Registriert seit:
    25.08.2011
    Hallo

    Ich entwickle hier einen REST JSON Service. REST JSON mit .NET, Client ist Android.
    Ich habe eine URL die wunderbar funktioniert. Wenn ich die unter Windows im Browser ausführe bekomme ich ein JSON zurück.

    Wenn ich die selbe URL mit Android ansteure bekomme ich IMMER ein Timeout. Mit dem Android bin ich via WLAN im Firmennetz. Mit einem Windows Laptop und dem selben WLAN bekomme ich auch ein JSON. Nur mit dem Android nicht. Egal ob im Code oder mit dem Android Browser. Was kann man überhaupt falsch machen?
    Den Server erreiche ich, jedenfalls sagt mir dass das Ping auf dem Android. :)

    Zugreifen tue ich mit der IP, nicht mit dem Namen. htt://192.168.1.111/LoginService/Authenticate?username=TEST&password=75fe41b978ed63f28839857d0d4d4155

    Die Loginmethode läuft nicht in einer Activity sondern in einem Thread den ich mit new Thread() und run() aus der Activity raus gestartet habe.

    Timeout ist auf 90 Seknden gestellt, es macht aber immer nach 10 Sekunden boom.

    Wie so immer die Timeouts?

    Code für die Abfrage:
    Code:
    public static User login(final String unsername, final String password)
    {
        String baseUrl = Pref.getInstance(Pit.getContext()).getBaseUrl();
        int timeout = Pref.getInstance(Pit.getContext()).getLoginTimeout();
    
        baseUrl = getBaseUrl(baseUrl, unsername, password);
    
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeout * 1000);
        HttpConnectionParams.setSoTimeout(httpParameters, timeout * 1000);
    
        HttpClient httpClient = new DefaultHttpClient(httpParameters);
        HttpGet httpGet = new HttpGet(baseUrl);
    
        HttpResponse response;
    
        try
        {
            response = httpClient.execute(httpGet);
    
            HttpEntity entity = response.getEntity();
    
            InputStream instream = entity.getContent();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
    
            StringBuilder sb = new StringBuilder();
    
            String line = null;
    
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "n");
            }
    
            String result = sb.toString();
    
            Log.i(TAG, result);
    
            instream.close();
    
        }
        catch (ClientProtocolException ex)
        {
            Log.e(TAG, "ClientProtocolException", ex);
        }
        catch (IOException ex)
        {
            Log.e(TAG, "IOException", ex);
        }
        catch (Exception ex)
        {
            Log.e(TAG, "Exception", ex);
        }
        finally
        {
            httpGet.abort();
        }
    
        return null;
    }
    
     
  2. Unicate, 25.05.2012 #2
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    p bei http vergessen?

    ansonsten sieht es eigentlich gut aus.

    Du solltest vielleicht den respondecode auslesen ob der 200 ist.
     
  3. GENiALi, 25.05.2012 #3
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    10
    Registriert seit:
    25.08.2011
    Jetzt bakam ich schon Herzrasen. Ob das wirklich der Fehler war? Ne, war es nicht. Url sieht so aus.
    http://192.168.1.111/LoginService/A...EST&password=75fe41b978ed63f28839857d0d4d4155

    Das mit dem Code mache ich gleich noch. Nur, einen solchen Code kann ich doch erst nach dem httpClient.execute(httpGet) ausführen. Oder? Leider gibt es kein danach. Weil genau dort liegt mein Problem.

    Der ursprüngliche Beitrag von 16:08 Uhr wurde um 16:12 Uhr ergänzt:

    Komme tatsächlich nie zu einem gültigen response umd den Status abzufragen.
     
  4. Unicate, 25.05.2012 #4
    Unicate

    Unicate Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    Hast du auch die Internetrechte im Manifest gesetzt?

    Ansonsten mal die LogCat incl. des Stacktraces der Exception posten.
     
  5. GENiALi, 25.05.2012 #5
    GENiALi

    GENiALi Threadstarter Erfahrener Benutzer

    Beiträge:
    248
    Erhaltene Danke:
    10
    Registriert seit:
    25.08.2011
    OK. Es liegt definitiv nicht am Code. Ich habe als Jux mal die URL meines Blogs rein getan. Siehe da, bekomme eine Antwort. Also muss es wohl am Webserver meines PC's liegen. Nur, wie so bekommen dann die andern PC's im Netz eine Antwort? Nur ich nicht? hmmm

    Der ursprüngliche Beitrag von 16:16 Uhr wurde um 16:20 Uhr ergänzt:

    Problem gelöst.
    Grund war, dass sich mein Android immer wieder, unbemerkt von mir, mit einem anderen WLAN verbunden hatte. Jetzt habe ich das WLAN gelöscht, das Böse, und nun bekomme ich wunderbar eine JSON Antwort.

    Danke für die Hilfe. Auf zum nächsten Problem.
     

Diese Seite empfehlen