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);
我正在尝试使用 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);