Adding a File to a Content Provider

Occasionally you might need to store a file in a database. The usual approach is to save the file to disk and then update the record in the database that points to the corresponding file name.

Android takes this protocol and automates it by defining a specific procedure for saving and retrieving these files. Android uses a convention where a reference to the file name is saved in a record with a reserved column name of _data.

When a record is inserted into that table, Android returns the URI to the caller. Once you save the record using this mechanism, you also need to follow it up by saving the file in that location. To do this, Android allows ContentResolver to take the Uri of the database record and return a writable output stream. Behind the scenes, Android allocates an internal file and stores the reference to that file name in the data field.

If you were to extend the Notepad example to store an image for a given note, you could create an additional column called _data and run an insert first to get a URI back. The following code demonstrates this part of the protocol:

ContentValues values = new ContentValues(); values.put("title", "New note"); values.put("note","This is a new note");

0 0


  • liisa
    What is the protocol to save a file in a content provider in android?
    7 years ago

Post a comment