2016-12-20 6 views
0

フラグメントのLoader Managerコールバックに対して、onLoadFinishedのコード行があります。コードの問題はArrayAdapterにfavoriteMoviesを表示する必要があることです。なぜなら、logステートメントでカーソルまたはデータが空ではないことが示されている間は、何らかの理由でゼロになります。Loader ManagerのonLoadFinishedでCursorからデータを抽出する

@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(); 
    } 

} 

このコードを書くと、実際にはsetステートメントを終了してからsetMovies()メソッドを呼び出すことができます。私のアプリをバックグラウンドで最小限に抑えて復元すると、映画は表示されますが、初めて呼び出されると機能しません。

+0

'「コードの問題がfavoriteMoviesがArrayAdapterに表示する必要があるということです」'、はい確かに、これは問題であり、 'Cursor'ベースのデータを扱う際に' ArrayAdapter'を使用してはいけません、代わりに 'SimpleCursorAdapter'を使用してください(または他の' CursorAdapter') – pskink

+0

SimpleCursorAdapterは、モデルにマップされているretrofitを使用して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(); 
    } 

} 
関連する問題