2016-12-20 3 views
0

У меня есть строки кода в onLoadFinished для моего обратного вызова диспетчера Loader во фрагменте. Проблема с кодом заключается в том, что любимые файлы необходимо отображать в ArrayAdapter, так что по какой-либо причине оно равно нулю, а оператор журнала показывает, что курсор или данные не пустые.Извлечение данных из курсора в 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. Когда я сворачиваю свое приложение на задний план и восстанавливаю его, фильмы перерисовываются, но он не работает в первый раз, когда он вызывается.

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

} 
Смежные вопросы