【问题标题】:onLoadFinish() gives null on cursoronLoadFinish() 在光标上给出 null
【发布时间】:2016-09-18 07:53:30
【问题描述】:

我正在尝试使用 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:尝试在空对象引用上调用虚拟方法 'android.database.Cursor itsme.com.movi​​ecatalogue.GridViewAdapter.swapCursor(android.database.Cursor)'

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

【问题讨论】:

    标签: java android sqlite nullpointerexception android-cursorloader


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      设置mAdapter在使用mAdapter之前正确添加以下代码

      mAdapter = new <nameOfCursorAdapter>(this,null);
      

      例如,如果您的光标适配器名称是 myCustomCursorAdapter,那么代码将如下所示
      mAdapter = new myCustomCursorAdapter(this,null);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多