1

私のアプリはアンドロイド 2.3.3 ではうまく動作しますが、アンドロイド 4.1.2 では強制終了します。以下は、アンドロイド デバイスからサーバーにデータを送信するコードです。

HttpEntity entity;
HttpClient client = new DefaultHttpClient();
String url ="http://67.23.166.35:80/android/insertv2.php";

HttpPost request = new HttpPost(url);
StringEntity se = new StringEntity(datatoServer);
se.setContentEncoding("UTF-8");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
entity = se;
request.setEntity(entity);
HttpResponse response = client.execute(request);
entity = response.getEntity();
4

3 に答える 3

0

メイン スレッドでネットワーク操作を行わないでください。AyncTask を使用してください

例:

 AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

    @Override
    protected void onPreExecute() {
         //Show UI

    }

    @Override
    protected Void doInBackground(Void... arg0) {
         // do your background process 
        HttpEntity entity;
        HttpClient client = new DefaultHttpClient();
        String url ="http://67.23.166.35:80/android/insertv2.php";

        HttpPost request = new HttpPost(url);
        StringEntity se = new StringEntity(datatoServer);
        se.setContentEncoding("UTF-8");
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
        entity = se;
        request.setEntity(entity);
        HttpResponse response = client.execute(request);
        entity = response.getEntity();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
                      //Show UI (Toast msg here)

    }

    };

    task.execute((Void[])null);

それ以外の場合は追加できます

 super.onCreate(savedInstanceState);

         StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
于 2013-11-14T07:35:28.687 に答える
0

強制終了が発生したときに ddms-log から取得した例外を貼り付けることはできますか? そうすれば、なぜこれが起こっているのかを正確に把握できます。私が推測していることから、Android 3.0 以降では許可されていないメイン スレッド (UI) でネットワーク操作を行っている可能性があります。詳しくはこちらの投稿をご覧ください。私が推測しているので、私はそれについて間違っているかもしれません。

AsyncTask :

スレッド :

new Thread(){
  public void run(){
    HttpEntity entity;
    HttpClient client = new DefaultHttpClient();
    String url ="http://67.23.166.35:80/android/insertv2.php";

    HttpPost request = new HttpPost(url);
    StringEntity se = new StringEntity(datatoServer);
    se.setContentEncoding("UTF-8");
    se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
    entity = se;
    request.setEntity(entity);
    HttpResponse response = client.execute(request);
    entity = response.getEntity();
        runOnUiThread(new Runnable() {

            public void run() {
                // TODO Auto-generated method stub
                // do what you have to do
            }
    });
  }
}.start();
于 2013-11-14T06:44:49.593 に答える