私はmysqlサーバからgoogleマップの座標のペアをダウンロードする必要があるアプリケーションを使用しています。私は正常にphpと正常なhttpostを使用してこれを行うことができますが、私のアプリは数秒間フリーズします。非同期HTTPポストandroid
サーバが処理を終了して結果を送信するまでフリーズするのを避けるために、httppostを非同期にする必要があることを読んだ。
ポイントは、通常のhttpostのようなjson配列でその結果が必要なことです。
たとえば、もし私がこのhttppostを持っていたら。
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();
}
フリーズを避けるために、非同期ポストに変換するにはどうすればよいですか?
私は(それがあるとして、あなたのコードはコンパイルすらできるかわかりませんが、[ 'EntityUtils.toString(response.getEntity())']を使用してくださいhttp://stackoverflow.com/a/2324739/180740)を使用して、独自のBufferedReader-n-StringBuilderパーティを作成するのではなく、前者はコードが少なく、正しいエラー処理があり、サーバーから送信された文字エンコーディングに従います。 –