2017-02-03 17 views
0

私は文字列のArrayListを返す関数を作った。その関数では、私はif/else文を持っています。 if文では、AsyncTaskを使用してバックグラウンドスレッドを開始します。私の質問は、私の関数AsyncTaskを終了する前にqueriedCardIDListと呼ばれるArrayListを返しますか?もしそうなら、どうすればこの問題を回避できますか?if/else文の中でAsyncTaskを呼び出すと - android

乾杯!

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

1.はい(というか:大きなチャンスがある)非同期タスクを呼び出し、2。 AsyncTaskを適切に使用する(onPostExecute内のデータを使用する) – Selvin

答えて

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(); 
関連する問題