Ich benutze eine Anwendung, wo ich nur ein paar Koordinaten für Google Maps von einem MySQL-Server herunterladen müssen. Ich kann dies erfolgreich mit PHP und einem normalen httpost, aber meine App friert für ein paar Sekunden, wenn ich es mache.Async HTTP Post-Android
Ich lese, dass Sie httppost asycronous machen müssen, um das Einfrieren zu vermeiden, bis der Server das Prossess beendet und die Ergebnisse sendet.
Der Punkt ist, dass ich brauche, dass Ergebnisse in einem JSON-Array wie der normale httpost ergibt.
Zum Beispiel, wenn ich diese httppost hatte.
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "12345"));
nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
String result11 = null;
// convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is11, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is11.close();
result11 = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
// parsing data
try {
JSONArray jArray1 = new JSONArray(result11);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Wie kann ich das zu einem asynchronen Beitrag umwandeln, damit ich den Einfrieren vermeiden kann?
Ich habe keine Ahnung, wie Ihr Code könnte sogar kompilieren, wie es ist, aber bitte verwenden [ 'EntityUtils.toString (response.getEntity())'] (http://stackoverflow.com/a/2324739/180740) anstelle einer eigenen BufferedReader-n-StringBuilder-Partei. Ersteres ist weniger Code, hat eine korrekte Fehlerbehandlung und gehorcht der Zeichencodierung, die vom Server gesendet wird. –