> Mark Murphy, any thoughts? :)

<blink, blink>

Thanks for the vote of confidence! Though, bear in mind, I'm not an
Android team member, nor do I play one on TV.

> Now, according to the documentation, deleteRow is supposed to delete a
> row "from the underlying datastore". How does the Cursor know what
> table/row the cursor correspond to?

It's been a while since I looked at NotePad, so forgive me if I mis-speak
here...

NotePad uses a ContentProvider (NotePadProvider), so the Cursor you're
presumably referring to is the one in the activity showing the notes
(e.g., NotesList). In that case, the Cursor isn't directly accessing the
database (a la SQLiteCursor), but rather wraps the Intent-laden IPC
mechanism that Android has...somewhere...that bridges between the Cursor
and the ContentProvider interface supported by the NotePadProvider.
Content providers may not be in-process, particularly if they're supplied
by some other application than your own.

When you call deleteRow() on the Cursor, the Cursor does not know the
table/row, as the Cursor has no idea how the ContentProvider is providing
the content: SQLite? in-memory data? random-data generator?

What the Cursor *does* know, though, is the Uri of the piece of content
the Cursor presently points to. On a deleteRow(), that Uri eventually
winds up as a parameter to the delete() method on the NotePadProvider
(again, via Androidy IPC goodness). It is up to NotePadProvider to parse
that Uri and determine the appropriate table/row.

> I tried to single-step through the
> NotesList application and the delete method belonging to the
> DataProvider class, NotePadProvider is not used at all.

I find that somewhat difficult to believe. Maybe the debugger doesn't step
through the Android innards as Cursor#deleteRow() goes through the IPC to
get to ContentProvider#delete().

> Further more, the cursor can be the result of a complex "join" query
> in which case, how would anyone know which row to delete?

If you do a complex join while query()-ing
"content://com.google.provider.NotePad/notes", and you get back rows with
IDs of 4, 8, 15, 16, 23, and 42, the Cursor turns those into Uri instances
like "content://com.google.provider.NotePad/notes/4" and so on.

When it comes to Cursors and ContentProviders, the Uri is your friend.

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com
_The Busy Coder's Guide to Android Development_ -- Available Now!


--~--~---------~--~----~------------~-------~--~----~
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]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to