sách gpt4 ăn đã đi

android - 如何从另一个 AsyncTask 调用 AsyncTask?

In lại 作者:搜寻专家 更新时间:2023-11-01 09:48:28 27 4
mua khóa gpt4 giày nike

我有两个 AsyncTask:第一个寻找素数,如果成功,我必须调用第二个 AsyncTask 显示单词“Yop!” (将这个词添加到数组列表中,并显示在AsyncTask三)。

如果我从 onProgressUpdate 调用第二个 AsyncTask,我有错误:

Process: com.egoriku.asynctask, PID: 3274
java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:605)
at android.os.AsyncTask.execute(AsyncTask.java:560)
at com.egoriku.asynctask.activities.MainActivity$MyTaskTwo.onProgressUpdate(MainActivity.java:175)
at com.egoriku.asynctask.activities.MainActivity$MyTaskTwo.onProgressUpdate(MainActivity.java:153)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:680)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:6066)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:770)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660)

我的任务一:

private class MyTaskTwo extends AsyncTask {

public MyTaskTwo() {
}

@Ghi đè
protected void onPreExecute() {
super.onPreExecute();
}

@Ghi đè
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}

@Ghi đè
protected void onProgressUpdate(Integer... values) {
Log.e("T2", "onProgressUpdate");
super.onProgressUpdate(values);
tempListMessages.add(hintThreadTwo + " " + String.valueOf(values[0]));
Log.e("T2", "add to list");
myTaskFour.execute();
Log.e("T2", "tast 3 execute");
Log.e("T2", "end");
}

@Ghi đè
protected Void doInBackground(Void... params) {
Log.e("T2", "doInBackground");
int nowDigit = 1;
while (!isCancelled()) {
boolean flag = true;

for (int i = 2; i < nowDigit; i++) {
if (nowDigit % i == 0) {
flag = false;
}
}

if (flag) {
thử {
Thread.sleep(450);
} bắt (InterruptedException e) {
e.printStackTrace();
}
callThreadFour = true;
publishProgress(nowDigit);
}
nowDigit++;
}
trả về giá trị null;
}
}

我的任务二

rivate class MyTaskFour extends AsyncTask {
public MyTaskFour() {
}

@Ghi đè
protected Void doInBackground(Void... params) {
Log.e("T4", "doInBackground");
publishProgress();
trả về giá trị null;
}

@Ghi đè
protected void onPreExecute() {
super.onPreExecute();
}

@Ghi đè
protected void onPostExecute(Void aVoid) {
Log.e("T4", "onPostExecute");
super.onPostExecute(aVoid);
}

@Ghi đè
protected void onProgressUpdate(Void... values) {
Log.e("T4", "onProgressUpdate");
super.onProgressUpdate(values);
tempListMessages.add(hintThreadFour + " " + textThreadFour);
callThreadFour = false;
}
}

câu trả lời hay nhất

myTaskFour 对象已经在您的代码某处执行。尝试将 MyTaskTwo 类上的 onProgressUpdate() 方法更改为这样

@Ghi đè
protected void onProgressUpdate(Integer... values) {
Log.e("T2", "onProgressUpdate");
super.onProgressUpdate(values);
tempListMessages.add(hintThreadTwo + " " + String.valueOf(values[0]));
Log.e("T2", "add to list");
new MyTaskFour.execute(); // creates a new MyTaskFour instance
Log.e("T2", "tast 3 execute");
Log.e("T2", "end");
}

关于android - 如何从另一个 AsyncTask 调用 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829886/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress