0

私はAndroidに比較的慣れていません。AsyncTask を使用しようとしていますが、スレッドが実行された後、アプリを強制的に閉じる必要があります。非同期スレッド内で、Android センサーからのデータを保存するサーバー側で php を実行します。どんな助けでも大歓迎です。ありがとう

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
 .....
 final FuncionsActivity functions = new FuncionsActivity();
 if(something)
    functions.execute(nameValuePairs); 
 .....
  }

 private class FuncionsActivity extends 
       AsyncTask<ArrayList<NameValuePair>, Integer, Integer > {
    @Override
    protected Integer doInBackground(ArrayList<NameValuePair>... data) {
         // 1) Connect via HTTP. 2) Encode data. 3) Send data.
        try
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new     

                  HttpPost("http://.../saveCoordinates.php");                           
            //HttpPost httppost = new 
            httppost.setEntity(new UrlEncodedFormEntity(data[0]));
            HttpResponse response = httpclient.execute(httppost);
            Log.i("postData", response.getStatusLine().toString());
            this.onPostExecute(null);
                //Could do something better with response.
        }
        catch(Exception e)
        {
            Log.e("log_tag", "Error1:  " + e.toString());
        }
      return 0;     
      }

      protected void onProgressUpdate(Integer... item){
            Log.d("TestP", item[0] + " item has been processed");
      }

      protected void onPostExecute(Integer result){
            Log.d("TestP", "AsyncTask returned : " + result);
      }
 }

@Override
protected void onDestroy() {            
    super.onDestroy(); // Move to bottom
    //System.runFinalizersOnExit(true);
}
}
4

3 に答える 3

1

あなたは自分自身を呼ぶ必要はありませんonPostExecute()、システムはあなたが戻ってきたものは何でもそれをしますdoInBackground()

return nullは他の答えが言うように行を変更することで問題を解決できると思いますが、それはおそらくあなたが望むものではありません。おそらく、応答から抽出された整数などを返したいと思うでしょう。

あなたのコードのもう一つの奇妙なことはdata[0]、データはArrayListです、それはコンパイルされますか?また、重複する変数コンパイラエラーが発生するため、新しい変数データを定義することはできません。

于 2012-08-03T20:07:33.853 に答える
0

これを変更してみてください:

this.onPostExecute(null);

これに:

return null;
于 2012-08-03T20:00:24.707 に答える
0

バックグラウンド メソッド内で post Execute メソッドを呼び出そうとしているのはなぜですか。自動的に呼び出されます。取り外して試してみてください

それが役に立てば幸い

于 2012-08-03T20:03:38.243 に答える