onLoadFinish()在游标

时间:2016-05-20 22:56:04

标签: java android sqlite nullpointerexception android-cursorloader

我正在尝试用来自带有Cursor loader的DB中的数据填充我的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:尝试调用虚方法&#39; android.database.Cursor itsme.com.movi​​ecatalogue.GridViewAdapter.swapCursor(android.database.Cursor)&#39;在空对象引用上

在上面的代码中,光标c正确地获取了所有数据。但我在NullPointerException的{​​{1}}上获得了swapCursor()。我不明白我做错了什么。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

设置mAdapter在使用mAdapter

之前正确添加以下代码
mAdapter = new <nameOfCursorAdapter>(this,null);

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