2015-09-12 1 views
0

У меня есть две внутренние таблицы SQL-таблиц с конструктором запросов поставщика контента. Мой загрузчик показывает первое в виде сетки, как шарм. Вторая таблица была создана для отображения списка избранного и поэтому имеет первичный ключ, внешний ключ и другой столбец. Кстати, когда я пытаюсь получить значение из этого, я получаю null. Некоторые предложения, пожалуйста!Restar Loader не может обновить gridview

У меня есть это контент-провайдера:

static { 
     sMovieByFavoriteQueryBuilder = new SQLiteQueryBuilder(); 

     sMovieByFavoriteQueryBuilder.setTables(
       MoviesContract.FavoriteEntry.TABLE_NAME + " INNER JOIN " + 
         MoviesContract.MovieEntry.TABLE_NAME + 
         " ON " + MoviesContract.FavoriteEntry.TABLE_NAME + 
         "." + MoviesContract.FavoriteEntry.COLUMN_FAVORITE_KEY + 
         " = " + MoviesContract.MovieEntry.TABLE_NAME + 
         "." + MoviesContract.MovieEntry._ID); 
    } 

    private static final String sFavoriteSelection = 
      MoviesContract.FavoriteEntry.TABLE_NAME + 
        "." + MoviesContract.FavoriteEntry.COLUMN_MOVIE_ID + " = ? AND " + 
        MoviesContract.FavoriteEntry.COLUMN_MOVIE_POSTER + " = ? AND " + 
        MoviesContract.MovieEntry.COLUMN_RELEASE_DATE + " = ? AND " + 
        MoviesContract.MovieEntry.COLUMN_MOVIE_POSTER + " = ? AND " + 
        MoviesContract.MovieEntry.COLUMN_ORIGINAL_TITLE + " = ? AND " + 
        MoviesContract.MovieEntry.COLUMN_SYNOSIS + " = ? AND " + 
        MoviesContract.MovieEntry.COLUMN_USER_RATING + " = ? "; 

I call this method by uri from fragment: 
@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     getLoaderManager().initLoader(MOVIES_LOADER, null, this); 
     getLoaderManager().initLoader(FAVORITE_LOADER, null, this); 
     super.onActivityCreated(savedInstanceState); 
    } 

    void onSortChanged() { 
     System.out.println("onSortChanged: true"); 
     updateMovies(); 
     getLoaderManager().restartLoader(MOVIES_LOADER, null, this); 
     System.out.println("LoaderManager: " + getLoaderManager().restartLoader(MOVIES_LOADER, null, this)); 
    } 

    void onFavorite() { 

     getLoaderManager().restartLoader(FAVORITE_LOADER, null, this); 
     mMoviesAdapter.setSelectedIndex(mPosition); 
     mMoviesAdapter.notifyDataSetChanged(); 
    } 


    private void updateMovies() { 
     PopularMoviesSyncAdapter.syncImmediately(getActivity()); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

     if (MainActivity.mFavorite == true) { 
      String sortOrder = MoviesContract.FavoriteEntry.COLUMN_FAVORITE_KEY; 
      String sortSetting = Utility.getPreferredSort(getActivity()); 
      Uri movieFavoriteUri = MoviesContract.MovieEntry.buildMovieWithSortDate(sortSetting, System.currentTimeMillis()); 
      System.out.println("movieFavoriteUri: " + movieFavoriteUri); 
      cursorFav = new CursorLoader(getActivity(), 
        movieFavoriteUri, 
        FAVORITE_COLUMNS, 
        null, 
        null, 
        sortOrder); 
      return cursorFav; 

     } else { 
      String sortOrder = MoviesContract.MovieEntry.COLUMN_DATE; 
      String sortSetting = Utility.getPreferredSort(getActivity()); 
      System.out.println("sortSetting: " + sortSetting); 
      Uri movieForSortUri = MoviesContract.MovieEntry.buildMovieSort(sortSetting); 

      System.out.println("movieForSortUri: " + movieForSortUri); 
      cursorMov = new CursorLoader(getActivity(), 
        movieForSortUri, 
        MOVIES_COLUMNS, 
        null, 
        null, 
        sortOrder); 
      return cursorMov; 

     } 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     mMoviesAdapter.swapCursor(data); 
     if (mPosition != GridView.INVALID_POSITION) { 
      // If we don't need to restart the loader, and there's a desired position to restore 
      // to, do so now. 
      mGridView.smoothScrollToPosition(mPosition); 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 
     mMoviesAdapter.swapCursor(null); 

    } 
+0

Итак, если вы запрашиваете каждую отдельную таблицу, вы получаете данные? Если это так, проблема заключается в том, как вы сделали это соединение. Можете ли вы показать нам что-то еще? –

+0

Да, я не могу только присоединиться –

ответ

0

Вместо:

sMovieByFavoriteQueryBuilder.setTables(
      MoviesContract.FavoriteEntry.TABLE_NAME + " INNER JOIN " + 
        MoviesContract.MovieEntry.TABLE_NAME + 
        " ON " + MoviesContract.FavoriteEntry.TABLE_NAME + 
        "." + MoviesContract.FavoriteEntry.COLUMN_FAVORITE_KEY + 
        " = " + MoviesContract.MovieEntry.TABLE_NAME + 
        "." + MoviesContract.MovieEntry._ID); 

Создать строку, так что вы можете отлаживать легко.

strTables = MoviesContract.FavoriteEntry.TABLE_NAME + " INNER JOIN " + 
        MoviesContract.MovieEntry.TABLE_NAME + 
        " ON " + MoviesContract.FavoriteEntry.TABLE_NAME + 
        "." + MoviesContract.FavoriteEntry.COLUMN_FAVORITE_KEY + 
        " = " + MoviesContract.MovieEntry.TABLE_NAME + 
        "." + MoviesContract.MovieEntry._ID); 

sMovieByFavoriteQueryBuilder.setTables(strTables); 

Затем попытайтесь запустить это соединение прямо на db. Я предполагаю, что у запроса есть некоторые проблемы.

+0

Ты прав Карлос. В моем запросе было что-то не так. Решено использовать rawquery вместо SQLiteQueryBuilder –

0

Я проверил, и запрос работает хорошо. Но мой метод не может вернуть ничего

private Cursor getMovieByFavorite(Uri uri, String[] projection, String movieId) { 
     String sortSetting = MoviesContract.MovieEntry.getFavoriteFromUri(uri); 
     long date = MoviesContract.MovieEntry.getDateFromUri(uri); 
     String[] selectionArgs; 
     String selection; 

     selection = sFavoriteSelection; 
     selectionArgs = new String[]{sortSetting}; 

     return sMovieByFavoriteQueryBuilder.query(mOpenHelper.getReadableDatabase(), 
       projection, 
       selection, 
       null, 
       null, 
       null, 
       movieId 
     ); 
    } 
+0

Это, вероятно, должно быть местом другого запроса. Но что возвращает 'sMovieByFavoriteQueryBuilder.query()'? –

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