Note that there are some explanatory texts on larger screens.

plurals
  1. POjava.lang.IllegalArgumentException: column '_id' does not exist with Ormlite cursor
    text
    copied!<p>I'm using Ormlite with <code>CursorLoader</code>, using the <a href="https://github.com/campnic/ormlite-android-extras" rel="nofollow">ormlite-extras</a> library (I use the package <code>support.extras</code> as I intend to target android 2.2 and up).</p> <p>I have the following exception :</p> <pre><code>FATAL EXCEPTION: main java.lang.IllegalArgumentException: column '_id' does not exist at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) at android.support.v4.widget.CursorAdapter.swapCursor(CursorAdapter.java:344) at rainstudios.meleo.ui.eventlv.EventLvFragment.onLoadFinished(EventLvFragment.java:274) at rainstudios.meleo.ui.eventlv.EventLvFragment.onLoadFinished(EventLvFragment.java:1) at android.support.v4.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:427) at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:395) at android.support.v4.content.Loader.deliverResult(Loader.java:103) at rainstudios.meleo.data.RainstudiosOrmliteCursorLoader.deliverResult(RainstudiosOrmliteCursorLoader.java:68) at rainstudios.meleo.data.RainstudiosOrmliteCursorLoader.deliverResult(RainstudiosOrmliteCursorLoader.java:1) at android.support.v4.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:221) at android.support.v4.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:61) at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:461) at android.support.v4.content.ModernAsyncTask.access$500(ModernAsyncTask.java:47) at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:474) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3835) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) at dalvik.system.NativeStart.main(Native Method) </code></pre> <p>I did some digging and noticed that indeed <code>'_id'</code> is not present in the <code>results</code> returned by the code in the CursorLoader.</p> <p>For more information, please see the code above : </p> <pre><code>/* Runs on a worker thread */ @Override public Cursor loadInBackground() { Cursor cursor = null; try { CloseableIterator&lt;T&gt; iterator = mDao.iterator(mQuery); // get the raw results which can be cast under Android AndroidDatabaseResults results = (AndroidDatabaseResults) iterator .getRawResults(); cursor = results.getRawCursor(); } catch (SQLException e) { e.printStackTrace(); } if (cursor != null) { // Ensure the cursor window is filled cursor.getCount(); registerContentObserver(cursor, mObserver); } return cursor; } </code></pre> <p>Using the debugger, it appears the following : </p> <pre><code>results.columnNameMap = [id, code, name, popular, rating, voteCount, shortDescription, description, hoursDescription, url, modificationDate, syncDate, artist_id, district_id, pictures, frontPicture, userRating, venue_id, userComment, userFavorite, situation_id, caFrontPictureId, caResources] results.columnNames = {syncDate=11, userRating=16, district_id=13, pictures=14, userFavorite=19, artist_id=12, code=1, situation_id=20, frontPicture=15, voteCount=5, url=9, caResources=22, id=0, hoursDescription=8, userComment=18, shortDescription=6, description=7, popular=3, name=2, venue_id=17, rating=4, caFrontPictureId=21, modificationDate=10} </code></pre> <p>The creation of the prepared query is pretty standard : </p> <pre><code>public PreparedQuery&lt;EventDb&gt; findAllEventsQuery() { try { QueryBuilder&lt;EventDb, Integer&gt; eventQb = getEventDao() .queryBuilder(); return eventQb.prepare(); } catch (Throwable e) { Out.handleSilentError("Cannot retrieve all events", e); } return null; } </code></pre> <p>I did the test executing the query and getting the results as a List : everything works alright.</p> <p>For now, I'm puzzled.</p> <p>Besides, I have another for the ormlite experts.</p> <ul> <li>Am I supposed to close the iterator by calling <code>iterator.closeQuietly()</code> ?</li> </ul>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload