Errore di Android CursorLoader e LoaderManager

Sto cercando di implementare un CursorLoader e un LoaderManager su una min API di 10.

Tuttavia, continuo a ricevere un'exception illegale di argomento sulla row 63 di AsyncTaskLoader.class (Il codice sorgente dell'ASyncTaskLoader.class in cui si verifica l'exception è sotto e in questo collegamento .

  • Come fornire un servizio i18n per sviluppatori e utenti finali
  • Qual è il modo corretto per implementare la coppia di valori-chiave in Spinner in android
  • Come si può analizzare HTML in android?
  • Timeout di attività inattivo per HistoryRecord?
  • Ottieni il numero di telefono programmaticamente - Android
  • Come creare un effetto di count per un textView in Android
  • /* Runs on the UI thread */ @Override protected void onPostExecute(D data) { if (DEBUG) Log.v(TAG, this + " onPostExecute"); try { AsyncTaskLoader.this.dispatchOnLoadComplete(this, data); } finally { done.countDown(); } } 

    Di seguito è riportto lo stack sull'errore:

     AsyncTaskLoader$LoadTask.onPostExecute(Object) line: 63 AsyncTaskLoader$LoadTask(ModernAsyncTask).finish(Object) line: 461 ModernAsyncTask.access$500(ModernAsyncTask, Object) line: 47 ModernAsyncTask$InternalHandler.handleMessage(Message) line: 474 ModernAsyncTask$InternalHandler(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 137 ActivityThread.main(String[]) line: 4424 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 511 ZygoteInit$MethodAndArgsCaller.run() line: 784 ZygoteInit.main(String[]) line: 551 NativeStart.main(String[]) line: not available [native method] 

    Ho provato il mio fornitore di contenuti e ho validationto che il metodo della query restituisce un cursore valido dal mio database Sqlite. Di seguito è il codice sorgente della mia attività che sto cercando di implementare il CursorLoader e il LoaderManager:

     import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.SimpleCursorAdapter; import android.widget.ListView; public class Screen1_MainData extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> { SimpleCursorAdapter adapter; ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.screen1_maindata); initLoader(); } void initLoader() { String[] uiBindFrom = { Useful_Info_TableMetaData.USEFUL_INFO_COLUMN_NAME }; int[] uiBindTo = { R.id.name }; lv = (ListView) findViewById(R.id.screen1_MainListView); getSupportLoaderManager().initLoader(0, null, this); adapter = new SimpleCursorAdapter(this, R.layout.row, null, uiBindFrom, uiBindTo, 0); lv.setAdapter(adapter); } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { String[] projection = { Useful_Info_TableMetaData.USEFUL_INFO_COLUMN_NAME }; return new CursorLoader( this, // The Activity context Useful_Info_TableMetaData.CONTENT_URI, projection, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { adapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { adapter.swapCursor(null); } } 

    Qualcuno qui vede qualcosa che sto facendo male?

    Grazie.


    L'applicazione sembra farcela

     @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { adapter.swapCursor(data); } 

    e poi lascia l'exception.

    Di seguito è riportto il logcat:

     08-03 23:33:20.736: E/AndroidRuntime(17256): FATAL EXCEPTION: main 08-03 23:33:20.736: E/AndroidRuntime(17256): java.lang.IllegalArgumentException: column '_id' does not exist 08-03 23:33:20.736: E/AndroidRuntime(17256): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:267) 08-03 23:33:20.736: E/AndroidRuntime(17256): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:78) 08-03 23:33:20.736: E/AndroidRuntime(17256): at android.support.v4.widget.CursorAdapter.swapCursor(CursorAdapter.java:344) 08-03 23:33:20.736: E/AndroidRuntime(17256): at android.support.v4.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:326) 

  • Come posso utilizzare MS Visual Studio per lo sviluppo di Android?
  • Il dispositivo Android non è riconosciuto in adb
  • Android - instradamento di Google Maps
  • Utilizzando API Google Drive per accedere alla mia cartella "pubblica" android / iOS
  • Come escludere la tua app dal menu Condividi?
  • Il messaggio GCM viene sovrascritto?
  • One Solution collect form web for “Errore di Android CursorLoader e LoaderManager”

    Provare a spostare initLoader dopo la chiamata a lv.setAdapter . Ciò assicurerà che onLoadFinished (e quindi adapter.swapCursor(data) ) sarà chiamato dopo che SimpleCursorAdapter è stato associato con il ListView .

    Inoltre, accertati che il database _id una colonna denominata _id per la chiave primaria, poiché il CursorAdapter non functionrà altrimenti. _id deve essere restituito come parte dei risultati del CursorLoader . Altrimenti, un'exception verrà gettata.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.