0

サーバーの PHP サイトに HTTP リクエストを送信しています。しかし、リクエストを送信している間、電話が数秒間動かなくなりました。要求された結果を送受信するのに時間がかかることがあります。

これを解決する方法。解決策を見つけるのを手伝ってください。ありがとう。

これは私が試したコードです...

public void postData() {
// Create a new HttpClient and Post Header
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
}

}

4

4 に答える 4

1

http リクエストを作成するには、AsyncTask を使用する必要があります。これはバックグラウンドで実行されます。

参考までに以下のリンクを参照してください

http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-10-30T05:05:15.663 に答える
0

UI スレッドから http リクエストを作成するには、 AsyncTaskを使用します。コードを次のように変更します。

private class LongOperation extends AsyncTask<String, Void, String> {

          @Override
          protected Void doInBackground(String... params) {

              //Call your post method here
                  postData();

                  return null;
          }      

          @Override
          protected void onPostExecute(String result) {
              // get result after operation complete
          }

          @Override
          protected void onPreExecute() {
          }

          @Override
          protected void onProgressUpdate(Void... values) {
          }
    }   
于 2012-10-30T05:06:19.763 に答える
0

ネットワーク スレッド以外のスレッドでネットワーク操作を実行する必要があります。同じことについては、ハンドラと非同期タスクを参照してください。

http://developer.android.com/training/basics/network-ops/connecting.html#AsyncTask

http://developerlife.com/tutorials/?p=290

于 2012-10-30T05:08:54.300 に答える
0

このようにしてみてください。次を使用できます:HttpClient.exeucute(httpPost)そして HttpResponse を取得します

これは私にとって完璧です。

DefaultHttpClient client = new DefaultHttpClient();

    HttpPost post = new HttpPost(url);

    List<NameValuePair> params = new ArrayList<NameValuePair>();

    pairs.add(new BasicNameValuePair("email", stringeditemail));

    UrlEncodedFormEntity formEntity = null;
    try {
        formEntity = new UrlEncodedFormEntity(params);

    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    post.setEntity(formEntity);

    try {

        HttpResponse response = client.execute(post);
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == HttpStatus.SC_OK) {
            HttpEntity entity = response.getEntity();
            InputStream is = entity.getContent();
            return iStream_to_String(is);
        } else {
            return "Hello This is status ==> :"
                    + String.valueOf(statusCode);
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;

}

そして、stringbuilder を文字列に変換するメソッドを作成します

 public static String iStream_to_String(InputStream is1) {
    BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096);
    String line;
    StringBuilder sb = new StringBuilder();
    try {
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String contentOfMyInputStream = sb.toString();
    return contentOfMyInputStream;
}
于 2012-10-30T06:31:57.100 に答える