2016-12-20 47 views
0

我在onLoadFinished中爲我的Loader管理器回調中的代碼段添加了一行代碼。代碼的問題在於,需要在ArrayAdapter中顯示favoriteMovies,所以出於某種原因,當log語句顯示遊標或數據不爲空時,它爲零。從加載程序管理器onLoadFinished中的光標中提取數據

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount()); 
    if (data != null && data.getCount() > 0) { 
      while (data.moveToNext()) { 
       favouriteMovies.add(
         new Movie(
           data.getString(2), 
           data.getString(3), 
           data.getString(4), 
           data.getInt(1), 
           data.getString(5), 
           data.getDouble(6), 
           data.getDouble(7) 
         )); 

     } 
     setMovies(favouriteMovies); 
     hideLoadingProgress(); 
     mAdapter.notifyDataSetChanged(); 

    } else { 
     showEmptyView(EMPTY_VIEW_TYPE_LOCAL); 
     hideLoadingProgress(); 
    } 

} 

如何編寫此代碼,以便在調用setMovies()方法之前實際等待while語句完成。當我將應用程序最小化爲背景並將其恢復時,電影會顯示出來,但它在第一次調用時不起作用。

+0

'「與代碼的問題是需要favoriteMovies顯示在一個ArrayAdapter」',那確實,這是一個問題,不使用'ArrayAdapter'用'基於Cursor'數據處理時,使用'SimpleCursorAdapter'代替(或任何其他的'CursorAdapter') – pskink

+0

你是對的,但SimpleCursorAdapter不會作爲數據的一部分從服務器獲得作爲JSON使用翻新映射到模型,所以我有兩個數據源。 – Po10cio

+0

然後使用'MatrixCursor',最有可能與'MergeCursor' – pskink

回答

0

經過多次試驗後,我簡單地檢查光標,以確定它是否是最後一個索引,然後調用我的其他函數,如下所示。

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    Log.i(TAG, "Loader Manager Loading Finished: " + data.getCount()); 
    favouriteMovies.clear(); 
    if (data != null && data.getCount() > 0) { 
     while (data.moveToNext()) { 
      favouriteMovies.add(
        new Movie(
          data.getString(2), 
          data.getString(3), 
          data.getString(4), 
          data.getInt(1), 
          data.getString(5), 
          data.getDouble(6), 
          data.getDouble(7) 
        )); 
      if (data.isLast()) { 
       setMovies(favouriteMovies); 
       hideLoadingProgress(); 
       mAdapter.notifyDataSetChanged(); 
      } 
     } 


    } else { 
     showEmptyView(EMPTY_VIEW_TYPE_LOCAL); 
     hideLoadingProgress(); 
    } 

}