gpt4 book ai didi

java - 是否可以从 onPostExecute 调用 doInBackground?

转载 作者:搜寻专家 更新时间:2023-11-01 08:31:55 26 4
gpt4 key购买 nike

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
asyntask.execute();
}

我正在从一些 API 读取数据。是否可以从 onPostExecute 调用 doInBackground()

我想像(UI 中的网络任务和更新)一样递归执行 5 次。提前致谢。

最佳答案

onPostExecute 中再次启动 AsyncTask 是一个可怕的想法。由于您想递归地进行 5 次网络调用以及 UI 更新,因此我建议您保留一个界面来跟踪 AsyncTask 调用。

下面是一个关于如何实现该行为的示例。你可以像这样创建一个interface

public interface MyResponseListener {
void myResponseReceiver(String result);
}

现在您也在 AsyncTask 类中声明接口(interface)。所以你的 AsyncTask 可能看起来像这样。

public class YourAsyncTask extends AsyncTask<Void, Void, String> {

// Declare an interface
public MyResponseListener myResponse;

// Now in your onPostExecute
@Override
protected void onPostExecute(final String result) {
// Send something back to the calling Activity like this to let it know the AsyncTask has finished.
myResponse.myResponseReceiver(result);
}
}

现在您需要像这样在Activity 中实现您已经创建的interface。您需要将接口(interface)的引用传递给您从 Activity

开始的 AsyncTask
public class MainActivity extends Activity implements MyResponseListener {
// Your onCreate and other function goes here

// Declare an AsyncTask variable first
private YourAsyncTask mYourAsyncTask;

// Here's a function to start the AsyncTask
private startAsyncTask(){
mYourAsyncTask.myResponse = this;
// Now start the AsyncTask
mYourAsyncTask.execute();
}

// You need to implement the function of your interface
@Override
public void myResponseReceiver(String result) {
if(!result.equals("5")) {
// You need to keep track here how many times the AsyncTask has been executed.
startAsyncTask();
}
}
}

关于java - 是否可以从 onPostExecute 调用 doInBackground?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com