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

    Son Goku Threadstarter Android-Hilfe.de Mitglied

    Hallo

    Ich sitze seit einigen Tagen an meinem ersten Android-App und hab ein kleines Problem, dass ich einfach nicht gelöst bekomme.

    Der Quellcode soll folgende Funktion erfüllen:
    Es soll ein Script auf einer Website kontaktiert werden, auf der verschiedene Infos bereitgestellt werden. Diese werden als JSON übermittelt und sollen später in einer ListActivity angezeigt werden.

    Folgendes ist mein Quellcode:
    Code:
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        String param1 = getIntent().getExtras().getString("param1");
        HttpGet httpGet = new HttpGet("http://10.0.2.2/app/kategorien.php?param=" + param1);
        String[] result = {};
        
        try {
          HttpClient httpClient = new DefaultHttpClient();
          HttpResponse 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);
          }
          String test = sb.toString();
          JSONObject json = new JSONObject(test);
          
          JSONArray nameArray = json.names();
          JSONArray valArray = json.toJSONArray(nameArray);
          
          for(int i = 0; i < valArray.length(); i++) {
            result[i] = valArray.getString(i);
          }
        } catch(ClientProtocolException e) {
          result[0] = &quot;test&quot;;
        } catch(IOException e) {
          result[0] = &quot;test2&quot;;
        } catch(JSONException e) {
          result[0] = &quot;test3&quot;;
        } catch(Exception e){
          result[0] = &quot;test4&quot;;
        } finally {
          httpGet.abort();
        }
        [...]
      }
    
    Ich hab verschiedene Haltepunkt gesetzt. Der letzte, an dem meine App noch anhält ist in dieser Zeile:
    Code:
    JSONObject json = new JSONObject(test);
    Danach bekomme ich die Meldeung &quot;Source not found&quot;.
    Folgenden Stack zeigt mir Eclipse an:
    Code:
    Thread [<3> main] (Suspended (exception RuntimeException))    
        ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2496    
        ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2512    
        ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119    
        ActivityThread$H.handleMessage(Message) line: 1863    
        ActivityThread$H(Handler).dispatchMessage(Message) line: 99    
        Looper.loop() line: 123    
        ActivityThread.main(String[]) line: 4363    
        Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]    
        Method.invoke(Object, Object...) line: 521    
        ZygoteInit$MethodAndArgsCaller.run() line: 860    
        ZygoteInit.main(String[]) line: 618    
        NativeStart.main(String[]) line: not available [native method]    
    
    Was genau ist mein Problem und wie kann ich es lösen?

    Den Beispielcode, wo ich mir einige Schnipsel kopiert habe, kann ich leider nicht mehr finden.

    Viele Grüße
    Son Goku

    Edith hat nen Rechtschreibfehler gefunden.
     
    Zuletzt bearbeitet: 08.12.2010
  2. ko5tik, 07.12.2010 #2
    ko5tik

    ko5tik Android-Experte

    1. Eclipse ist Scheiße ( als Entwicklungsumgebung )
    2. Debugger gehören verboten
    3. Log.d() strategosch patziert würde dir wesentlich mehr Infrormationen bitten (und schneller zum Ergebnis führen)

    Als erstes würde ich einfach ausgeben, was du überhapt von dem Server gelesen hast.
     
  3. ts-apps, 07.12.2010 #3
    ts-apps

    ts-apps Erfahrener Benutzer

    Jo zeig uns mal den JSON Text
     
  4. the_alien, 07.12.2010 #4
    the_alien

    the_alien Android-Lexikon

    Was genau sagt denn die Fehlermeldung der RuntimeException? Und -siehe oben- wie sieht der JSON Text aus.
     
  5. Son Goku, 08.12.2010 #5
    Son Goku

    Son Goku Threadstarter Android-Hilfe.de Mitglied

    Das ist mein JSON-Text:
    Code:
    [{"key1":"aaa","val1":"bbb"},{"key1":"yyy","val1":"ccc gg"},{"key1":"a\u00fcs","val1":"byxcbb"},{"key1":"asdfg","val1":"l\u00d6p"}]
    Der Quellcode zu dem JSON-Text:
    Code:
    <?php
    $jsonText = array(
      array(
        "key1"  => "aaa",
        "val1"  => "bbb"
      ),
      array(
        "key1"  => "yyy",
        "val1"  => "ccc gg"
      ),
      array(
        "key1"  => utf8_encode("aüs"),
        "val1"  => "byxcbb"
      ),
      array(
        "key1"  => "asdfg",
        "val1"  => utf8_encode("lÖp")
      ),
    );
      
    $json = json_encode($jsonText);
    
    header("Content-type: text/json; charset=utf-8;");
    echo $json;
    ?>
    
    @ko5tik: Log.d() muss ich mir mal anschauen. Danke für den Tipp.

    @the_alien: Wenn ich wüsste, wo ich den einsehen kann, würde ich ihn Dir zeigen. Aber mir wird auch nur das angeziegt, was ich hier rein kopiert hab.
     
  6. ts-apps, 08.12.2010 #6
    ts-apps

    ts-apps Erfahrener Benutzer

    Na das sieht doch eher nach einem Json Array aus ;-)

    Versuch mal
    Den restlichen code kannst dir dann eigentlich spaaren.
     
  7. ko5tik, 08.12.2010 #7
    ko5tik

    ko5tik Android-Experte

    Es ist weniger interessant, wie du JSON produzuerst (wir sind hir nicht im PHP-Forum), sondern was bei deiner App ankommt
     
  8. Son Goku, 08.12.2010 #8
    Son Goku

    Son Goku Threadstarter Android-Hilfe.de Mitglied

    Autsch!
    Ja genau, das wars.
    Mit einigen Änderungen des Nachfolgenden Codes, läuft nun alles Problemlos.
    Danke!

    Aber eine Frage hätte ich noch.
    Ich hab in der Nachfolgende neuen Schleife einen Array-Überlauf produziert, da wurde die Exception "Exception" korrekt abgefangen.

    Für die Zeile
    Code:
    JSONObject json = new JSONObject(test);
    will der Compiler auch unbedingt, dass ich eine "JSONException" abfange.
    Es wird aber eine RuntimeException geworfen, die ich nicht abfangen kann.
    Lt. Doku sollte diese auch nicht geworfen werden.

    Was könnte da falsch gelaufen sein, bzw. was macht das für einen Sinn?
     
  9. ko5tik, 08.12.2010 #9
    ko5tik

    ko5tik Android-Experte

    Natürlich kanst du auch eine RuntimeException abfangen - man sollte es aber nicht
    tun.

    RuntimeException kann jederzeit passieren, und der KOmpiler hat keine Möglichkeit zu überprüfen und dich dazu zwingen.
    ( Mehr dazu in dem Java-Buch deines vertrauens )
     
  10. Son Goku, 08.12.2010 #10
    Son Goku

    Son Goku Threadstarter Android-Hilfe.de Mitglied

    Diese konnte ich aber nicht abfangen.
    Ich hab die Zeile eingefügt gehabt, sie wurde aber immer wieder ignoriert, also hab ich sie wieder entfernt.
    Hab das Ganze auch eben wieder getestet.
     
  11. the_alien, 08.12.2010 #11
    the_alien

    the_alien Android-Lexikon

    Natürlich kannst du die fangen...

    Code:
    
    
    public class RuntimeExceptionTest {
    
    	public static void main(String[] args) {
    		try {
    			throw new RuntimeException();
    		} catch (RuntimeException e) {
    			System.out.println("Exception gefangen");
    		}
    	}
    
    }
    
    Und den Stacktrace deiner Exception siehst du im Android Log. Entweder über "adb logcat" oder über den Logcat View in Eclipse.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Widget zeigt keine ImageView an. Android App Entwicklung Montag um 09:39 Uhr
[ERLEDIGT] (Verständnis-)Probleme mit SwipeRefreshLayout Android App Entwicklung 12.08.2017
[ERLEDIGT] Probleme mit Bluetooth / Beam Ordner Android App Entwicklung 25.07.2017
[ERLEDIGT] Probleme mit AdMob Android App Entwicklung 19.07.2017
[ERLEDIGT] Probleme mit Service unter Android N Android App Entwicklung 16.07.2017
[OFFEN] Probleme in den Speicher schreiben Android App Entwicklung 13.07.2017
[ERLEDIGT] Kleine Probleme mit einer App Android App Entwicklung 14.06.2017
[OFFEN] Probleme mit Action Floating Button Android App Entwicklung 27.05.2017
[ERLEDIGT] WebView Probleme Android App Entwicklung 19.05.2017
[GELÖST] Android PHP MySQL Android App Entwicklung 05.05.2017
Du betrachtest das Thema "Probleme beim Auslesen von JSON" im Forum "Android App Entwicklung",