0

Ich versuche, meine Benutzeroberfläche mit Daten aus der DB mit Cursor loader zu füllen.onLoadFinish() gibt Null auf Cursor

Im Folgenden finden Sie auf meiner 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); 
} 

Exception

java.lang.NullPointerException: Der Versuch, virtuelle Methode ‚android.database.Cursor itsme.com.moviecatalogue.GridViewAdapter aufzurufen. swapCursor (android.database.Cursor) 'auf einem Nullobjekt Referenz

In der obigen Code-Cursor c erhält mich alle Daten korrekt. Aber ich bekomme eine NullPointerException auf swapCursor() in onLoadFinished(). Ich verstehe nicht, was ich falsch mache.

Antwort

0

Sie versuchen, die Methode swapCursor() unter mAdapter aufzurufen, die an diesem Punkt gleich null ist. Dies führt zu der NullPointerException, die Sie sehen. Stellen Sie sicher, dass vor dem Methodenaufruf mAdapter richtig eingestellt ist.

0

So legt mAdapter richtig folgenden Code hinzufügen, bevor mAdapter

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

für Beispiel, wenn Ihr Cursor-Adapter Name ist mit myCustomCursorAdapter dann Code, um diesen wie
mAdapter = new myCustomCursorAdapter(this,null);