Reading should be Ok, perhaph there is something unusual going on in your
code?

The last function on the stack is SqliteDatabase.lock - do you perhaps have
a background thread that also locks the database for a long time?

-- Kostya

2011/4/4 space <[email protected]>

> Hi!
>
> I got an ANR in an application which used the CursorAdapter, and I
> started thinking if it's allowed to be used or not.
> It's pretty common to create a ListActivity (or just an Activity with
> a ListView) and set a CursorAdapter as adapter to it. However when the
> data set changes, the CursorAdapter gets the callback and calls
> requery (of it's enabled of course). However this requery could result
> in a database access, which is really bad in the main thread (like in
> my case).
>
> This is the stacktrace:
>
> android.database.sqlite.SQLiteDatabase.lock (SQLiteDatabase.java:378)
> android.database.sqlite.SQLiteQuery.fillWindow (SQLiteQuery.java:64)
> android.database.sqlite.SQLiteCursor.fillWindow (SQLiteCursor.java:
> 287)
> android.database.sqlite.SQLiteCursor.getCount (SQLiteCursor.java:268)
> android.database.CursorWrapper.getCount (CursorWrapper.java:70)
> android.database.MergeCursor.getCount (MergeCursor.java:61)
> android.widget.CursorAdapter.getCount (CursorAdapter.java:132)
> android.widget.HeaderViewListAdapter.getCount
> (HeaderViewListAdapter.java:132)
> android.widget.AdapterView$AdapterDataSetObserver.onChanged
> (AdapterView.java:782)
> android.database.DataSetObservable.notifyChanged
> (DataSetObservable.java:31)
> android.widget.BaseAdapter.notifyDataSetChanged (BaseAdapter.java:50)
> android.widget.CursorAdapter$MyDataSetObserver.onChanged
> (CursorAdapter.java:385)
> android.database.DataSetObservable.notifyChanged
> (DataSetObservable.java:31)
> android.database.AbstractCursor.requery (AbstractCursor.java:97)
> android.database.sqlite.SQLiteCursor.requery (SQLiteCursor.java:548)
> android.database.CursorWrapper.requery (CursorWrapper.java:211)
> android.database.MergeCursor.requery (MergeCursor.java:249)
> android.widget.CursorAdapter.onContentChanged (CursorAdapter.java:361)
> android.widget.CursorAdapter$ChangeObserver.onChange
> (CursorAdapter.java:377)
> android.database.ContentObserver$NotificationRunnable.run
> (ContentObserver.java:43)
> android.os.Handler.handleCallback (Handler.java:587)
> android.os.Handler.dispatchMessage (Handler.java:92)
> android.os.Looper.loop (Looper.java:123)
> android.app.ActivityThread.main (ActivityThread.java:3701)
> java.lang.reflect.Method.invokeNative
> java.lang.reflect.Method.invoke (Method.java:507)
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
> (ZygoteInit.java:866)
> com.android.internal.os.ZygoteInit.main (ZygoteInit.java:624)
> dalvik.system.NativeStart.main
>
> So, does this mean that simply using CursorAdapter (with
> autoRequery=true) is dangerous? If yes, what is the proper way to use
> it?
>
> Thanks in advance!
> /Pal Szasz
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to