0

非同期タスクを内部メソッドとして実行する必要があるオブジェクト (ui スレッド上ではない) があり、メソッドに ui スレッドを渡し、その方法で asynctask に ui スレッドを実装したい - これを行う方法はありますか? ?

疑似コード:

      public class EditDetails extends Activity{          
                MyObject obj = new obj;
                obj.syncWithServer(EditDetails.this);
      }

      public class MyObject {
           public void syncWithWerver(EditDetails parent){
                 final class GetUserHttpTask extends AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> {
                        @Override
                        protected String doInBackground(String... params) {
                             return "";
                        }
                        @Override
                        protected String onPostExecute(String result) {
                              //this doesn't run
                        }
                 }
           }
      }          

注: doInBackground の後に onPostExecute が起動しないため、現時点ではこれは機能していません。

編集

このコードは疑似コードであり、実際の問題はまだ発生しており、ここにhttp://pastebin.com/jW6JpUbg をリストしました.. 基本的に、pastebin で 72 行目を実行した後にスタックします。

4

2 に答える 2

2

奇妙なことに、 であるonPostExecute必要がありますvoid。オーバーライドされたメソッドの戻り値の型を変更したため、コードはどのようにコンパイルされているのだろうか?

修正後、次のようonPostExecuteに実行できます。AsyncTask

final class GetUserHttpTask extends AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> {
        @Override
        protected String doInBackground(String... params) {
             return "";
        }
        @Override
        protected String onPostExecute(String result) {
              // this will run
        }
} 
public void syncWithWerver(EditDetails parent){
     AsyncTask task = new GetUserHttpTask();
     task.execute();
}
于 2013-04-22T11:31:13.670 に答える
1

このようにタスクを実行しようとしましたか?

parent.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            new GetUserHttpTask().execute();
        }
});

これはうまくいくはずだと思います..

追加した:

AsyncTask実装は次のようになります。 注 : 更新されたコメントを読んでください。

class GetUserHttpTask extends AsyncTask<String/* in parameter for doInBackground */, Boolean /* in parameter for onProgressUpdate */, String /* Out parameter and in parameter for onPostExecute method*/> {
    @Override
    protected String doInBackground(String... params) {
        return "";
    }

    @Override
    protected void onPostExecute(String result) {
        // this doesn't run
    }

    @Override
    protected void onProgressUpdate(Boolean... values) {
        // TODO Auto-generated method stub
        super.onProgressUpdate(values);
    }
}
于 2013-04-22T11:32:44.100 に答える