Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:如果在方法中调用AsyncTask.execute(new Runnable()),则重写onPostExecute()_Java_Android_Android Asynctask - Fatal编程技术网

Java Android:如果在方法中调用AsyncTask.execute(new Runnable()),则重写onPostExecute()

Java Android:如果在方法中调用AsyncTask.execute(new Runnable()),则重写onPostExecute(),java,android,android-asynctask,Java,Android,Android Asynctask,我想在后台线程上执行一个方法: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); foo(); } public static void foo(){ Asyn

我想在后台线程上执行一个方法:

public class MainActivity extends AppCompatActivity {
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        foo();
    }

    public static void foo(){
        AsyncTask.execute(() -> {
            // perform some object creations
        });
    }

    public static void foo2(){
      // Method that updates UI (lists and views) which requires the main thread.
    }
}

我想在
AsynTask
完成时执行
foo2
,即
onPostExecute()
。在这种情况下,如何重写onPostExecute()。

您不能直接实现,可以通过扩展异步类来实现。

这可能会有所帮助,您可以通过类而不是方法来实现。请尝试以下代码段:

@Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      foo asyncTask=new foo();
      asyncTask.execute();

   }

private class foo extends AsyncTask<void, void, void> {
      @Override
      protected void onPreExecute() {
         super.onPreExecute();

      }
      @Override
      protected void doInBackground(String... strings) {

      }
      @Override
      protected void onPostExecute() {
         super.onPostExecute();
         foo2 asyncTask=new foo2();
         asyncTask.execute();
      }
   }

private class foo2 extends AsyncTask<void, void, void> {
      @Override
      protected void onPreExecute() {
         super.onPreExecute();

      }
      @Override
      protected void doInBackground(String... strings) {

      }
      @Override
      protected void onPostExecute() {
         super.onPostExecute();

      }
   }
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foo asyncTask=new foo();
asyncTask.execute();
}
私有类foo扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void doInBackground(字符串…字符串){
}
@凌驾
受保护的void onPostExecute(){
super.onPostExecute();
foo2 asyncTask=newfoo2();
asyncTask.execute();
}
}
私有类foo2扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void doInBackground(字符串…字符串){
}
@凌驾
受保护的void onPostExecute(){
super.onPostExecute();
}
}
这是我的工作

public class MyTask extends AsyncTask<String, Void, String>
{
    @Override
    protected Void doInBackground(String... params) {
        //Do background 
    }

    protected void onPostExecute() {
        foo2();
    }
}

void foo2(){
    //your function
}
公共类MyTask扩展了AsyncTask
{
@凌驾
受保护的Void doInBackground(字符串…参数){
//做背景
}
受保护的void onPostExecute(){
foo2();
}
}
void foo2(){
//你的职能
}
如果要在异步任务完成后执行某些功能, 您还可以从onPostExecute中更新UI,这更简单 如果对你有用的话

使用
AsyncTask.execute(Runnable)
您不能覆盖
onPostExecute
。您应该创建一个新的
AsyncTask
,或者创建扩展
AsyncTask
的类。