如何运行多个AsyncTask?

发布于 2024-11-18 01:19:25 字数 952 浏览 0 评论 0原文

我有2个旋转器, 使用 AsyncTask 从数据库加载每个微调器的数据,

我使用此调用 AsyncTasks

new PopulateSpinnerA().execute();

如果我只为一个微调器调用一个 AsyncTask,它就可以工作

但是!

我有 2 个 Spinner,所以我为每个 Spinner 调用 AsyncTask,就像这样

new PopulateSpinnerA().execute(); // for Spinner A
new PopulateSpinnerB().execute(); // for Spinner B

我运行它并且我的应用程序强制关闭

解决方案?

更新!

我从下面的人那里得到了灵感,他们用真假来回答

我使用布尔值(玩真假)来使我的两个旋转器生成,

首先我创建一个布尔变量,

Boolean SPN = false;

然后我创建一个函数检查布尔值并将其放在

private void cek(){
        if(!SPN){
            new populateSpinnerA().execute();
        }
        if(SPN){
            new populateSpinnerB().execute();
        }
    }

populateSpinnerA() 上的 onCreate() 函数上,我只是将这两行代码放在运行第二个微调器的 AsyncTask

SPN = true;
cek();

BOOM!

完成了:D

I have 2 spinner,
each spinner's data loaded from database using AsyncTask

i call the AsyncTasks using this

new PopulateSpinnerA().execute();

it works if i only call one AsyncTask for one Spinner

BUT!

i have 2 Spinners, so i call the AsyncTask for each Spinner like this

new PopulateSpinnerA().execute(); // for Spinner A
new PopulateSpinnerB().execute(); // for Spinner B

I run it and my app force close

solution?

UPDATE!

i get inspiration from someone below who answer with true and false

im using a boolean (playing with true and false) to make my two spinners generated

first i make a boolean variable

Boolean SPN = false;

then i make a function to check the boolean and put it on onCreate() function

private void cek(){
        if(!SPN){
            new populateSpinnerA().execute();
        }
        if(SPN){
            new populateSpinnerB().execute();
        }
    }

on populateSpinnerA() i just put this 2 lines to run the second spinner's AsyncTask

SPN = true;
cek();

and

BOOM!

it's done :D

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滥情空心 2024-11-25 01:19:25

您不能同时拥有两个旋转器。在这种情况下需要使用任何技巧,

  1. 仅使用一个旋转器。
  2. 在启动第一个微调器的同时启动微调器。
  3. 使用在执行后设置的一个通用标志。
  4. 在步骤#3 之前,在两个 AsyncTask 的执行后检查标志是否已设置,如果是,则取消微调器。

请参阅下面的伪代码。

postExecute(){
      If(taskCompletedFlag == true){
            //Code to cancel the spinner.
            taskCompletedFlag = false;
      }else{
            taskCompledtedFlag = true;
      }
}

PS - 如果您不知道哪个 AsyncTask 将首先启动,您可以在那里使用相同的机制。

You can not have two spinner at a time. Need to use any trick in this case,

  1. Use only one spinner.
  2. Start the spinner while initiating first spinner.
  3. Use one common flag set on PostExecute.
  4. Before step#3, on postExecute of both AsyncTask check the flag is already set, if yes just cancel the spinner.

Refer below pseudo code.

postExecute(){
      If(taskCompletedFlag == true){
            //Code to cancel the spinner.
            taskCompletedFlag = false;
      }else{
            taskCompledtedFlag = true;
      }
}

P.S. - In case you are not aware which AsyncTask will initiate first, you can use same mechanism over there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文