我正在尝试用来自带有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.moviecatalogue.GridViewAdapter.swapCursor(android.database.Cursor)&#39;在空对象引用上
在上面的代码中,光标c正确地获取了所有数据。但我在NullPointerException
的{{1}}上获得了swapCursor()
。我不明白我做错了什么。
答案 0 :(得分:1)
您正尝试在swapCursor()
上调用方法mAdapter
,此时等于null。这会导致您看到NullPointerException。
要解决此问题,请确保在方法调用之前正确设置mAdapter
。
答案 1 :(得分:1)
设置mAdapter
在使用mAdapter
mAdapter = new <nameOfCursorAdapter>(this,null);
例如,如果你的Cursor适配器名称是myCustomCursorAdapter
,那么代码将会是这样的
mAdapter = new myCustomCursorAdapter(this,null);