Android-HTTP Get
Habe ich Blick auf ein paar forum posten und ich kann nicht finden, eine Antwort auf mein problem. Ich versuche eine Antwort zu bekommen, aus einer php-Datei. Die php-Datei arbeitet. Das problem ist die Android-App wird nicht ausgeführt, auf meinen Wunsch. Hier sind zwei Beispiele von meinem code und das Ergebnis bekomme ich in die textview:
public void changText(View view) {
TextView textv = (TextView)findViewById(R.id.textview1);
textv.setText("Text Has Been Changed");
BufferedReader in = null;
String data = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
URI website = new URI("http://alanhardin.comyr.com/matt24/matt28.php");
request.setURI(website);
HttpResponse response = httpclient.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
textv.append(" Connected ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
Den TextView liest: der Text Wurde Geändert
public void changText(View view) {
TextView textv = (TextView)findViewById(R.id.textview1);
textv.setText("Text Has Been Changed");
BufferedReader in = null;
String data = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
URI website = new URI("http://alanhardin.comyr.com/matt24/matt28.php");
request.setURI(website);
//HttpResponse response = httpclient.execute(request);
//in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
textv.append(" Connected ");
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
Den TextView liest: der Text Wurde Geändert, Verbunden
In diesem manifest habe ich:
<uses-permission android:name="android.permission.INTERNET" />
In der error-log bekomme ich folgende:
Fehler in http-Verbindung android.os.NetworkOnMainThreadException
Jede mögliche Hilfe würde geschätzt.
In dem code, den Sie gepostet haben, bist du nicht wirklich liest noch einmal die Daten konstruieren Sie einen reader.
Was passiert, wenn Sie führen Sie Ihren code ?
Ich bin nicht versuchen, Lesen Sie die zurückgegebenen JSON-Objekt jetzt bin ich nur versucht, eine Verbindung zu meinem php-Datei
Wenn ich meine code mit dem ersten Beispiel der TextView liest: "Text Wurde Geändert". Wenn ich meinen code mit dem zweiten Beispiel die TextView liest: "der Text Geändert Wurde Angeschlossen". Es scheint den httpclient.execute(Anfrage); die die Probleme verursacht.
Was passiert, wenn Sie führen Sie Ihren code ?
Ich bin nicht versuchen, Lesen Sie die zurückgegebenen JSON-Objekt jetzt bin ich nur versucht, eine Verbindung zu meinem php-Datei
Wenn ich meine code mit dem ersten Beispiel der TextView liest: "Text Wurde Geändert". Wenn ich meinen code mit dem zweiten Beispiel die TextView liest: "der Text Geändert Wurde Angeschlossen". Es scheint den httpclient.execute(Anfrage); die die Probleme verursacht.
InformationsquelleAutor user908759 | 2013-12-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Android ist wahrscheinlich die Ausführung Ihrer Anfrage einfach gut. Sie scheinen einfach zu ignorieren die Daten, die vom server zurückgegeben werden. Sie konnte etwas tun, wie diese zum Beispiel:
Sieht es aus wie deine-server wieder ein JSON-Objekt, so würden Sie wahrscheinlich wollen zu tun, etwas intelligenter wie Lesen Sie die gesamte Antwort, analysieren Sie (mit
new JSONArray(response)
), und extrahieren der relevanten Felder, aber der obige code würde zumindest sicherzustellen, dass Android bei der Ausführung Ihrer Abfrage.EDIT: Von der Ausnahme, die Sie berichten, scheint es, dass Sie Ihren code ausführen, der auf den main-UI-thread. Ab API 11, dass ist verboten und verpönt war vorher). Es gibt mehrere Artikel auf, wie man dieses Problem beheben. Finden Sie in der Anleitung Thema Painless threading sowie tutorials hier und hier. Siehe auch dieser thread für weitere Informationen.
String
nehmen Sie einen Blick an diese Antwort.Danke für Ihre Antwort. Leider ist Ihre neue code funktionierte nicht. Die TextView immer noch liest "Text Wurde Geändert". Die Probleme scheint mit dem httpclient.execute(Anfrage), nicht mit dem Parsen von JSON. Ich weiß, irgendwann werde ich Lesen müssen das JSON-Objekt, aber jetzt bin ich nur versucht, eine Verbindung zu meinem php-Datei.
Es funktioniert noch, fügen Sie das Wort " Verbunden "? Vielleicht sind Sie jetzt abfangen einer Ausnahme. (By the way, ist es besser zu melden, die mit Ausnahme der drei-argument nennen
Log.e("log_tag", "Error in http connection", e);
zu fordern, anstatte.toString()
. Erhalten Sie weitere Informationen im logcat, dass Art und Weise.)Nicht Angeschlossen nicht Hinzugefügt. Das war der Punkt, der meine zwei Beispiele. Wenn ich auskommentiert "httpclient.execute(request);" Angeschlossen wurde, die an die TextView, wenn "httpclient.execute(request);" war NICHT auskommentiert, Verbunden ist, nicht angefügt. Dies ist der Grund, warum ich denke, das problem hat etwas zu tun mit "httpclient.execute(request);"
Ah. Das problem ist, dass Sie die Ausführung dieses Codes auf der Haupt-thread. Das ist nicht erlaubt, Es gibt mehrere Artikel auf, wie man dieses Problem beheben. Sehen Sie die Guide-Thema Painless threading sowie tutorials hier und hier. Siehe auch diesen thread
InformationsquelleAutor Ted Hopp
InformationsquelleAutor Raj008