在if / else语句中调用AsyncTask? - android

时间:2017-02-03 00:35:06

标签: java android arrays multithreading android-asynctask

所以,我做了一个返回字符串ArrayList的函数。在该函数中,我有一个if / else语句。在if语句中,我使用AsyncTask启动后台线程。我的问题是,在完成AsyncTask之前,我的函数是否会返回名为queriedCardIDList的ArrayList?如果是这样,我该如何解决这个问题?

干杯!

public ArrayList<String> getCardIDList()
{
   if(shouldIQuery())
   {
      QueryCardsAsyncTask queryCardsAsyncTask = new QueryCardsAsyncTask();
      queryCardsAsyncTask.execute();
   }
   else
   {
      myPreferences.loadCardsPrefs();
      for(CardModel c : myPreferences.getSavedCards())
      {
         queriedCardIDList.add(c.getCardID());
      }
      return queriedCardIDList;
   }
   return queriedCardIDList; 
}

1 个答案:

答案 0 :(得分:1)

管理您的异步任务,如下所述,

public class QueryCardsAsyncTask extends AsyncTask<Void, Void, ArrayList<String>> {

    private ArrayList<String> queriedCardIDList = new ArrayList<>();

    @Override
    protected ArrayList<String> doInBackground(Void... params) {
        if (shouldIQuery()) {
            // You logic to be written in async task
        } else {
            // else part, get your data from preference

            myPreferences.loadCardsPrefs();
            for (CardModel c : myPreferences.getSavedCards()) {
                queriedCardIDList.add(c.getCardID());
            }
        }

        return queriedCardIDList;
    }

    @Override
    protected void onPostExecute(ArrayList<String> cardIdList) {
        super.onPostExecute(cardIdList);
        // Now use cardIdList here as per your requirement
    }
}

然后只调用异步任务

 QueryCardsAsyncTask queryCardsAsyncTask = new QueryCardsAsyncTask();
 queryCardsAsyncTask.execute();