1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. aychiquita, 07.10.2010 #1
    aychiquita

    aychiquita Threadstarter Neuer Benutzer

    Hallo allerseits,

    seit einiger Zeit habe ich jetzt schon ein Problem, das ich nicht lösen kann.

    Ich habe eine Methode getJSONObject (siehe unten), die - gegeben der URL wie in der Parameterliste - das angefragte JSON Objekt returnt. Ich verbinde mich dabei mit einer API, was aber nicht so wichtig ist, denn der Fehler wird nicht dort liegen (Ich habe es viele Male getestet, die API antwortet fehlerfrei).

    Das Problem, das ich habe, ist das folgende:
    Immer wenn ich die Methode das erste Mal benutze, funktioniert alles einwandfrei. Sogar innerhalb einer bestimmten Zeitspanne arbeitet es weiterhin fehlerfrei. Wenn ich also getJSONObject ein zweites / drittes / ... Mal aufrufe, funktioniert die Methode immer noch. ABER: Wenn ich z.B. eine Minute warte und dann getJSONObject ausführe, kann keine Verbindung mehr hergestellt werden. Über getResponseCode() bekomme ich "-1". Und noch seltsamer: Falls ich danach noch einmal getJSONObject ausführe, funktioniert es wieder.

    Ich hoffe, ich habe das Problem gut genug beschrieben - Und hoffe natürlich, dass mir hier vllt. jemand helfen kann. Es würde mir sehr helfen!

    Danke für Eure Zeit!

    Code:
       public static JSONObject getJSONObject(String url)
       {
          try
          {
             SSLContext sslContext = SSLContext.getInstance("TLS");
             sslContext.init(null, new TrustManager[] { new MyTrustManager() }, new SecureRandom());
             
             HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
             HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());
             HttpsURLConnection httpsUrlConnection = (HttpsURLConnection) new URL(url).openConnection();
             httpsUrlConnection.setRequestMethod("GET");
             httpsUrlConnection.addRequestProperty(ApiData.getHeader1(), ApiData.getHeader1Value());
             httpsUrlConnection.setDoOutput(true);
             httpsUrlConnection.setDoInput(true);
             httpsUrlConnection.connect();
             
             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpsUrlConnection.getInputStream()));
             
             StringBuffer stringBuffer = new StringBuffer();
             
             String readLine;
             
             while((readLine = bufferedReader.readLine()) != null)
             {
                stringBuffer.append(readLine);
             }
             
             bufferedReader.close();
             
             httpsUrlConnection.disconnect();
             
             return new JSONObject(stringBuffer.toString());
          }
          catch(Exception e)
          {
             e.printStackTrace();
          }
          
          return null;
       }
     
  2. Tom299, 27.09.2011 #2
    Tom299

    Tom299 Android-Experte

    Hallo,

    ich muß eine HTTPS-Connection zu einem Server aufbauen und die Antwort verarbeiten. Dazu hab ich erst mal Google benutzt, um mir einige Code-Beispiele anzusehen.

    Folgendes, sehr simpe Code-Beispiel, habe ich dann verwendet (die url ist natürlich hier ausgetauscht):
    Code:
                    URL url;
                    try {
                        url = new URL("https://test.data.com");
                        HttpsURLConnection sslConnection = (HttpsURLConnection)url.openConnection();
                        System.out.println(sslConnection.getResponseMessage());
                        
                        String readLine;
                        BufferedReader buffReader = new BufferedReader (new InputStreamReader (sslConnection.getInputStream()));
                        
                        int counter = 0;
                        
                        //while (true) {
                        while (counter < 6) {
                            readLine = buffReader.readLine ();
                            if (readLine == null) {
                                sslConnection.disconnect();
                                return;
                            }
                            else {
                                counter++;
                                System.out.println(readLine);
                            }
                        }
                        sslConnection.disconnect();
                    }
                    catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                    catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
    
    Ich habe nun das Problem, daß die Verbindung mal funktioniert und mal nicht. Anfangs sah es so aus, als würde die 1. 3. 5. usw. Verbindung klappen und die 2. 4. 6. usw. nicht. Habe dann
    Code:
    sslConnection.disconnect()
    explizit eingebaut.
    Danach hatte es zumindest den Anschein, als würde es klappen, da es 3 oder 4 mal in Folge geklappt hat. Danach kam aber wieder der Fehler:
    Code:
    javax.net.ssl.SSLException: Not trusted server certificate
    .
    .
    Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
    
    .
    .
    Caused by: java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.
    
    Hat jemand eine Idee, warum es mal funktioniert und mal nicht? Für mich ist es schon wichtig, daß die Verbindung zuverlässig funktioniert und nicht nur per Zufall ...
     
  3. Kranki, 27.09.2011 #3
    Kranki

    Kranki Ehrenmitglied

  4. Tom299, 27.09.2011 #4
    Tom299

    Tom299 Android-Experte

    Danke für die Links, aber die kannte ich schon ;-)

    Leider gehts da fast immer nur um self-signed SSL certificates. Wir haben aber ein Zertifikat von Verisign. Ich kenn mich damit zwar nicht wirklich aus, aber ich nehme mal an, daß es dann nicht self-signed ist. Und ein KeyStore-File hab ich auch nicht und wüßte auch nicht, wo ich sowas finde ;-)

    Witzig ist halt, daß mein Arbeitskollege (er hat damals die Anwendung für Windows Mobile gemacht, ich portiere jetzt auf Android) genau die gleichen Probleme hat(te), mal ging es, mal nicht. Er hat einfach mehrmals die Connection versucht bis es ging. Aber mir gefällt die Lösung nicht, da es dann zu sehr auf Zufall beruht.

    Ich hab auch schon mal das TimeOut hochgesetzt, aber damit hat es auch nichts zu tun. Entweder kommt die Fehlermeldung sofort oder es funktioniert.

    Ist es möglich, daß der WebServer nen Tick hat oder so?
     
  5. Tom299, 27.09.2011 #5
    Tom299

    Tom299 Android-Experte

    Sieht so aus, als wäre dieser "Bug" nur bei Android < 2.3 vorhanden.

    Ich entwickele soweit es geht meistens auf 1.6 oder 2.1, und da ist mir dieser Bug sowohl mit dem Test-Handy als auch mit dem AVD begegnet.

    Jetzt hab ich spaßeshalber mal mein HTC Sensation mit der App getestet und siehe da, 20 mal in Folge eine Verbindung, nicht 1 Fehler. Hab dann mal ne AVD mit 2.3.1 erstellt und auch hier klappt die Verbindung ohne Fehler.

    Kann das evtl. jemand bestätigen? ;-)
     
  6. Monty1979, 06.01.2012 #6
    Monty1979

    Monty1979 Android-Hilfe.de Mitglied

    ich kann das bestätigen definitiv ein Bug vor 2.3. :cursing:

    Habe jetzt auf mehreren Geräten und AVD‘s getestet und einige User haben sich bei mir wegen diesem Problem ebenfalls gemeldet.
     
  7. Monty1979, 06.01.2012 #7
    Monty1979

    Monty1979 Android-Hilfe.de Mitglied

    und hier die Lösung
    Code:
    [B][COLOR=#7f0055][FONT=Verdana]if[/FONT][/COLOR][/B][COLOR=black][FONT=Verdana] ( android.os.Build.VERSION.[/FONT][/COLOR][I][COLOR=#0000c0][FONT=Verdana]SDK_INT[/FONT][/COLOR][/I][COLOR=black][FONT=Verdana] < 9) {[/FONT][/COLOR]
    [COLOR=black][FONT=Verdana]System.[I]setProperty[/I]([/FONT][/COLOR][COLOR=#2a00ff][FONT=Verdana]"http.keepAlive"[/FONT][/COLOR][COLOR=black][FONT=Verdana], [/FONT][/COLOR][COLOR=#2a00ff][FONT=Verdana]"false"[/FONT][/COLOR][COLOR=black][FONT=Verdana]);[/FONT][/COLOR]
    [COLOR=black][FONT=Verdana]}[/FONT][/COLOR]
    gefunden habe ich sie auf http://www.go-android.de/externe-news/androids-http-clients allerdings steht auf der Seite bis Froyo(8)
     
    Tom299 gefällt das.
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Wandernder Text Android App Entwicklung 17.10.2017
[OFFEN] Lists-in-List-Problem Android App Entwicklung 12.10.2017
[OFFEN] Problem mit meiner Login App Android App Entwicklung 10.06.2017
[OFFEN] git-Problem in Android Studio (Windows) Android App Entwicklung 24.05.2017
[ERLEDIGT] put in HashMap bringt App zum abstürzen Android App Entwicklung 22.05.2017
[ERLEDIGT] Problem mit Async Task und auszuführender Aufgabe Android App Entwicklung 02.05.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
Excel Dokument mithilfe von JExcelAPI auslesen funktioniert nicht :/ Android App Entwicklung 02.03.2017
Notizen App problem Android App Entwicklung 11.01.2017

Benutzer fanden diese Seite durch die Suche nach:

  1. keine verbindung java.security.cert.certpathvalidatorexception

    ,
  2. android Trust anchor for certification path not found

    ,
  3. keine verbindung zum eingangsserver java.security.cert

    ,
  4. keine sichere verbindung zum server möglich (java.security.cert.certPath