String aus MySQL-Datenbank lesen

H

Huntelaar

Gast
Ich habe schon mehrere Threads zu diesem Thema gelesen, jedoch bekomme ich es einfach nicht hin einen einfach String aus einer MySQL-Datenbank abzufragen. Meine PHP-Datei funiktioniert und liefert mit per json_encode ein array mit einem Eintrag der folgendermaßen aussieht zurück:

{"antwort":"Hier steht der String."}

Nun möchte ich diesen String in meiner App einfach abfangen und dort in eine String Variable (result) schreiben, das habe ich mit folgendem Code probiert:

Code:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.meineseite.de/meinephpdatei.php");
	    
String result = "";
	    
try {
   HttpResponse response = httpclient.execute(httppost);
   String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
   JSONArray mArray = new JSONArray(jsonResult);
	    	
   for (int i = 0; i < mArray.length(); i++) {
      JSONObject object = mArray.getJSONObject(i);
      result = object.getString("antwort");
} 
catch (JSONException e) {
   e.printStackTrace();
} 
catch (ClientProtocolException e) {
   e.printStackTrace();
} 
   catch (IOException e) {
   e.printStackTrace();
}

Jedoch stürzt meine App ab sobald ich die betroffene Seite in der App aufrufe. Was muss ich denn da im Code noch ändern, bzw. ergänzen?

Danke für eure Hilfe!
 
Zuletzt bearbeitet:
Jedoch stürzt meine App ab sobald ich die betroffene Seite in der App aufrufe
zzzzzZZZZZzzzzzz

und mit was für einer Fehlermeldung?

lg. Dagobert
 
So viele tutorials gelesen und dir ist nicht einmal das Wort logcat untergekommen? Oo
Naja Google mal nach Logcat und dann poste nochmal die Fehlermeldung ;)
LG. Dagobert
 
Ich rate mal ins Blaue und tippe auf ne "NetworkOnMainThreadException". Kommt hier gefühlt jeden Tag mindestens einmal vor. :D
 
  • Danke
Reaktionen: Max1809
Ich rate mal ins Blaue und tippe auf ne "NetworkOnMainThreadException". Kommt hier gefühlt jeden Tag mindestens einmal vor.
And the winner ist :D KatyB ^^

Herzlichen Glückwunsch sie haben 100 Gummipunkte gewonnen.
Wie immer sind diese Angaben ohne Gewähr
 
Entschuldige bitte, kenne mit leider nicht gut aus. Hier ist die Fehlermeldung:

logcat_fehlerghk7g.png

fehler2x3ue6.png
 
Zuletzt bearbeitet:
Ok, vielen Dank. Habe jetzt den Code in einen AsyncTask ausgelagert, und zwar so:

Code:
private class LongOperation extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
    		HttpClient httpclient = new DefaultHttpClient();
    	        HttpPost httppost = new HttpPost("http://www.meineseite.de/meinephpdatei.php");
    	        String result = "";
    	        try {

    	    	HttpResponse response = httpclient.execute(httppost);
    	    	String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
    	    	JSONArray mArray = new JSONArray(jsonResult);
    	    	for (int i = 0; i < mArray.length(); i++) {
    	    	    JSONObject object = mArray.getJSONObject(i);

    	    	    result = object.getString("antwort");
    	    	}

    	    	} 
    	    	catch (JSONException e) {
    	    		e.printStackTrace();
    	    	} 
    	    	catch (ClientProtocolException e) {
    	    		e.printStackTrace();
    	    	} 
    	    	catch (IOException e) {
    	    		e.printStackTrace();
    	    	}
            return result;
        }


		@Override
        protected void onPostExecute(String result) {
        }

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }

Das Ergebnis des Threads fange ich so ab:

Code:
String output = null;
try {
	output = new LongOperation().execute("").get();
} catch (InterruptedException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (ExecutionException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

Und das sagt LogCat dazu...

fehler3r7cr9.png
 
LIES das Logcat ... Fehlende Internet-Permission im Manifest?

Ansonsten als Tip: "onPostExecute" des AsyncTask verwenden und dort, falls der Async eine innere Klasse ist, ne Methode deiner eigentlichen Activity aufrufen. Oder gleich mit Listener arbeiten.

So wie dus jetzt machst blockst du den Mainthread schon wieder -.-
android - About AsyncTask.get() - Stack Overflow
 
Ich denke ich habe es jetzt soweit ungefähr hingebracht, zumindest habe ich keine Fehlermeldungen mehr :) Jedoch habe ich noch das Problem dass ich den String nicht abfangen kann. Ich bekomme ja von der php-Datei ein Array mit folgendem Inhalt:

{"antwort":"Das hier ist interessant."}

Ich möchte nun diesen Inhalt so abfangen dass ich den String "Das hier ist interessant" in die result-Variable speichern kann. Mein Code hierzu sieht so aus:

Code:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.meineSeite.com/meineDatei.php");
				    
String result = "Noch kein Eintrag.";
				    
try {
    HttpResponse response = httpclient.execute(httppost);
    String jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
    JSONArray mArray = new JSONArray(jsonResult);
				    	
     for (int i = 0; i < mArray.length(); i++) {
     JSONObject object = mArray.getJSONObject(i);
     result = object.getString("antwort");
     }
}

Das hier ist die inputStreamToString-Methode:

Code:
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));

try {
    while ((rLine = rd.readLine()) != null) {
         answer.append(rLine);
    }
}
catch (IOException e) {
    e.printStackTrace();
}
return answer;
}

Jedoch bleibt immer der bei der Initialisierung hineingeschriebene Eintrag "Noch kein Eintrag." und nicht der gewünschte String von der PHP-Datei bei result stehen.

Was mache ich da falsch?
 
Zuletzt bearbeitet:
Ist das WIRKLICH der Inhalt der von deinem PHP-Skript zurückgeliefert wird? (erst neulich war hier jemand, der hat sogar den Inhalt hierherkopiert in dem irgendeine Fehlerseite ausgeliefert wurde und meinte "Ne, ich krieg ein JSON ...")

Lass dir doch innerhalb des "for"-Blockes mal dein object ausgeben, wird sie überhaupt angetriggert, usw ... Etwas Eigeninitiative schadet auch nicht.


btw. (und das ist vermutlich die Lösung ;)), schau dir doch mal an wie ein JsonARRAY sich von einem JsonOBJECT unterscheidet und finde raus ob die äußersten Klammern auf ein Array oder auf ein Object hindeuten ;) (dein "jsonResult" ist also ein ... ;))
 
Zuletzt bearbeitet:
... Object? :)
 

Ähnliche Themen

netfreak
  • netfreak
Antworten
10
Aufrufe
461
netfreak
netfreak
S
Antworten
33
Aufrufe
2.674
Sempervivum
S
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
Zurück
Oben Unten