Android database topics
ContentProvider
•
Content providers
manage access to a structured set of data. They encapsulate the data, and
provide mechanisms for defining data security. Content providers are the
standard interface that connects data in one process with code running in
another process.
•
When you want to access
data in a content provider, you use the ContentResolver
object in your application's Context
to communicate with the provider as a client. The ContentResolver
object communicates with the provider object, an instance of a class that
implements ContentProvider.
The provider object receives data requests from clients, performs the requested
action, and returns the results.
Primary methods to be Implemented
•
query(Uri,
String[], String, String[], String)
which returns data to the caller
•
insert(Uri,
ContentValues)
which inserts new data into the content provider
•
update(Uri,
ContentValues,
String, String[]) which updates existing
data in the content provider
•
delete(Uri,
String, String[]) which deletes data
from the content provider
Accessing a Provider
// Queries the user dictionary and
returns results
mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI, // The
content URI of the words table
mProjection, // The columns to return for each row
mSelectionClause // Selection criteria
mSelectionArgs, // Selection criteria
mSortOrder); // The sort order for the
returned rows
Content URI :
content://user_dictionary/words
user_dictionary : Authority
Words :Table Path
content:// : scheme
Content Provider Permissions
•
<uses-permission
android:name="android.permission.READ_USER_DICTIONARY“>
•
Snippet for inserting
values
ContentValuesmNewValues = new
ContentValues();
/*
* Sets the values of each column and inserts the word. The arguments to
the "put" * method are "column name" and "value"
*/
mNewValues.put(UserDictionary.Words.APP_ID,
"example.user"); mNewValues.put(UserDictionary.Words.LOCALE,
"en_US"); mNewValues.put(UserDictionary.Words.WORD,
"insert"); mNewValues.put(UserDictionary.Words.FREQUENCY, "100");
mNewUri = getContentResolver().insert(
UserDictionary.Word.CONTENT_URI, // the user dictionary content URI mNewValues
// the values to insert );
Same way we can use update and delete.
Note : we should call
ContentResolver.query() on a separate
thread.one way to do this using the cursor loader class
Creating
a Content Provider
•
The abstract class ContentProvider
defines six abstract methods that you must implement as part of your own
concrete subclass. All of these methods except onCreate()
are called by a client application that is attempting to access your content
provider:
•
query()
Retrieve data from your provider. Use the arguments to select the table to
query, the rows and columns to return, and the sort order of the result. Return
the data as a Cursor
object.
•
insert()
Insert a new row into your provider. Use the arguments to select the
destination table and to get the column values to use. Return a content URI for
the newly-inserted row.
•
update()
Update existing rows in your provider. Use the arguments to select the table
and rows to update and to get the updated column values. Return the number of
rows updated.
•
delete()
Delete rows from your provider. Use the arguments to select the table and the
rows to delete. Return the number of rows deleted.
•
getType()
Return the MIME type corresponding to a content URI. This method is described
in more detail in the section Implementing Content Provider MIME Types. onCreate()
Initialize your provider. The Android system calls this method immediately
after it creates your provider. Notice that your provider is not created until
a ContentResolver
object tries to access it.
Sqlite
Database
•
Store structured data
in a private database.
•
The recommended method
to create a new SQLite database is to create a subclass of SQLiteOpenHelper
and override the onCreate()
method, in which you can execute a SQLite command to create tables in the
database.
•
The database is private
to the application.
Example:
public class DictionaryOpenHelper
extends SQLiteOpenHelper {
private static final int
DATABASE_VERSION = 2;
private static final String
DICTIONARY_TABLE_NAME = "dictionary"; private static final String
DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME +
" (" + KEY_WORD + " TEXT, " + KEY_DEFINITION + "
TEXT);";
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null,
DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabasedb) {
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}
•
To write to and read
from the database, call getWritableDatabase()
and getReadableDatabase(),
respectively. These both return a SQLiteDatabase
object that represents the database and provides methods for SQLite operations.
•
execute SQLite queries
using the SQLiteDatabasequery()
methods, which accept various query parameters, such as the table to query, the
projection, selection, columns, grouping, and others. For complex queries, such
as those that require column aliases, you should use SQLiteQueryBuilder,
which provides several convienent methods for building queries.
•
Every SQLite query will
return a Cursor
that points to all the rows found by the query. The Cursor
is always the mechanism with which you can navigate results from a database
query and read rows and columns.
SharedPrefernces
•
The SharedPreferences
class provides a general framework that allows you to save and retrieve
persistent key-value pairs of primitive data types. You can use SharedPreferences
to save any primitive data: booleans, floats, ints, longs, and strings. This
data will persist across user sessions (even if your application is killed).
•
To get a SharedPreferences
object for your application, use one of two methods:
•
getSharedPreferences()
- Use this if you need multiple preferences files identified by name, which you
specify with the first parameter.
•
getPreferences()
- Use this if you need only one preferences file for your Activity. Because
this will be the only preferences file for your Activity, you don't supply a
name
•
Call edit()
to get a SharedPreferences.Editor.
•
Add values with methods
such as putBoolean()
and putString().
•
Commit the new values
with commit()
Example:
•
public class PrefDemo
extends Activity {
•
/** Called when the activity is first
created. */
•
@Override
•
public void
onCreate(Bundle savedInstanceState) {
•
super.onCreate(savedInstanceState);
•
setContentView(R.layout.main);
•
SharedPreferencessPref
= PreferenceManager.getDefaultSharedPreferences(this);
•
int counter =
sPref.getInt("counter", 0);
•
TextViewtxtView =
(TextView) findViewById(R.id.txtBox);
•
txtView.setText("App
started " + counter + " times");
•
SharedPreferences.Editor
editor = sPref.edit();
•
editor.putInt("counter",
++counter);
•
editor.commit();
•
•
}
•
For retreving values
from shared prefernce several methods are there like getString(),getInt().
Internal storage
•
We can save files
directly on the device's internal storage. By default, files saved to the
internal storage are private to your application and other applications cannot
access them (nor can the user). When the user uninstalls your application,
these files are removed.
•
To create and write a
private file to the internal storage:
•
Call openFileOutput()
with the name of the file and the operating mode. This returns a FileOutputStream.
•
Write to the file with write().
•
Close the stream with close().
Example:
•
String FILENAME =
"hello_file";
String string = "hello world!";
FileOutputStreamfos =
openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
•
To read a file from internal
storage:
•
Call openFileInput()
and pass it the name of the file to read. This returns a FileInputStream.
•
Read bytes from the
file with read().
•
Modes available :MODE_APPEND,
MODE_WORLD_READABLE,
and MODE_WORLD_WRITEABLE,
MODE_PRIVATE .
External
storage:
•
Every
Android-compatible device supports a shared "external storage" that
we can use to save files. This can be a removable storage media (such as an SD
card) or an internal (non-removable) storage. Files saved to the external
storage are world-readable and can be modified by the user when they enable USB
mass storage to transfer files on a computer.
•
getExternalStorageState()
will return true if external storage is available.
Comments
Post a Comment
Please post comments here:-)