所以,我做了一个返回字符串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;
}
答案 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();