onLoadFinish() 在游标上给出 null

onLoadFinish() gives null on cursor

我正在尝试使用 Cursor 加载程序使用数据库中的数据填充我的 UI。

下面是我的 onCreateLoader()

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

   String sortingOrder = MovieContract.Movie.COLUMN_RATING + " ASC";
   Uri uri = MovieContract.Movie.buildMovieDbUri();

   Log.v(LOG_TAG, "URI: " + uri.toString() + " sorting: " + sortingOrder);

   Cursor c = getActivity().getContentResolver().query(uri, MOVIE_PROJECTION, null, null, sortingOrder);

   if (c.moveToFirst())
       Log.v(LOG_TAG, "Movie ID: " + c.getInt(PROJ_MOVIE_ID - 1));
   else
       Log.v(LOG_TAG, "Fail");

   CursorLoader cc = new CursorLoader(getActivity(),
       uri,
       MOVIE_PROJECTION,
       null,
       null,
       sortingOrder);
   return cc;
}

@Override
public void onLoadFinished(Loader < Cursor > loader, Cursor data) {
   mAdapter.swapCursor(data);
}

异常

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor itsme.com.moviecatalogue.GridViewAdapter.swapCursor(android.database.Cursor)' on a null object reference

在上面的代码中,游标 c 为我正确获取了所有数据。但是我在 onLoadFinished() 中的 swapCursor() 上得到了 NullPointerException。我不明白我做错了什么。

您正在尝试调用 mAdapter 上的方法 swapCursor(),此时它等于 null。这会导致您看到的 NullPointerException。

要解决此问题,请确保在方法调用之前正确设置 mAdapter

设置mAdapter在使用mAdapter

前适当添加如下代码
mAdapter = new <nameOfCursorAdapter>(this,null);

例如,如果您的 Cursor 适配器名称是 myCustomCursorAdapter,那么代码将像这样
mAdapter = new myCustomCursorAdapter(this,null);