The following code shows how to Read Database backed content provider and fill ListView.
Register provider in manifest file
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.java2s.myapplication3.app" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="java2s.com" android:theme="@style/AppTheme" > <activity android:name="com.java2s.myapplication3.app.MainActivity" android:label="java2s.com" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <provider android:name=".MyProvider" android:authorities="com.examples.sharedb.friendprovider"> </provider> </application> </manifest>
Layout xml file
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
Main activity Java file
package com.java2s.myapplication3.app; // w w w .j a v a 2 s . co m import android.app.Activity; import android.app.LoaderManager; import android.content.CursorLoader; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class MainActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener { private static final int LOADER_LIST = 100; SimpleCursorAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // getSupportLoaderManager().initLoader(LOADER_LIST, null, this); mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null, new String[]{MyProvider.Columns.FIRST}, new int[]{android.R.id.text1}, 0); ListView list = new ListView(this); list.setOnItemClickListener(this); list.setAdapter(mAdapter); setContentView(list); } @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Cursor c = mAdapter.getCursor(); c.moveToPosition(position); Uri uri = Uri.withAppendedPath(MyProvider.CONTENT_URI, c.getString(0)); String[] projection = new String[]{MyProvider.Columns.FIRST, MyProvider.Columns.LAST, MyProvider.Columns.PHONE}; //Get the full record Cursor cursor = getContentResolver().query(uri, projection, null, null, null); cursor.moveToFirst(); String message = String.format("%s %s, %s", cursor.getString(0), cursor.getString(1), cursor.getString(2)); Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); cursor.close(); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { String[] projection = new String[]{MyProvider.Columns._ID, MyProvider.Columns.FIRST}; return new CursorLoader(this, MyProvider.CONTENT_URI, projection, null, null, null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { mAdapter.swapCursor(data); } @Override public void onLoaderReset(Loader<Cursor> loader) { mAdapter.swapCursor(null); } }
Content provider file
package com.java2s.myapplication3.app; import android.content.ContentValues; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /*from w w w . j a v a2 s. com*/ import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class MyProvider extends ContentProvider { public static final Uri CONTENT_URI = Uri.parse("content://com.examples.sharedb.friendprovider/friends"); public static final class Columns { public static final String _ID = "_id"; public static final String FIRST = "firstName"; public static final String LAST = "lastName"; public static final String PHONE = "phoneNumber"; } /* Uri Matching */ private static final int FRIEND = 1; private static final int FRIEND_ID = 2; private static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); static { matcher.addURI(CONTENT_URI.getAuthority(), "friends", FRIEND); matcher.addURI(CONTENT_URI.getAuthority(), "friends/#", FRIEND_ID); } SQLiteDatabase db; @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int result = matcher.match(uri); switch(result) { case FRIEND: return db.delete(ShareDbHelper.TABLE_NAME, selection, selectionArgs); case FRIEND_ID: return db.delete(ShareDbHelper.TABLE_NAME, "_ID = ?", new String[]{uri.getLastPathSegment()}); default: return 0; } } @Override public String getType(Uri uri) { return null; } @Override public Uri insert(Uri uri, ContentValues values) { long id = db.insert(ShareDbHelper.TABLE_NAME, null, values); if(id >= 0) { return Uri.withAppendedPath(uri, String.valueOf(id)); } else { return null; } } @Override public boolean onCreate() { ShareDbHelper helper = new ShareDbHelper(getContext()); db = helper.getWritableDatabase(); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { int result = matcher.match(uri); switch(result) { case FRIEND: return db.query(ShareDbHelper.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder); case FRIEND_ID: return db.query(ShareDbHelper.TABLE_NAME, projection, "_ID = ?", new String[]{uri.getLastPathSegment()}, null, null, sortOrder); default: return null; } } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int result = matcher.match(uri); switch(result) { case FRIEND: return db.update(ShareDbHelper.TABLE_NAME, values, selection, selectionArgs); case FRIEND_ID: return db.update(ShareDbHelper.TABLE_NAME, values, "_ID = ?", new String[]{uri.getLastPathSegment()}); default: return 0; } } } class ShareDbHelper extends SQLiteOpenHelper { private static final String DB_NAME = "frienddb"; private static final int DB_VERSION = 1; public static final String TABLE_NAME = "friends"; public static final String COL_FIRST = "firstName"; public static final String COL_LAST = "lastName"; public static final String COL_PHONE = "phoneNumber"; private static final String STRING_CREATE = "CREATE TABLE "+TABLE_NAME+" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +COL_FIRST+" TEXT, "+COL_LAST+" TEXT, "+COL_PHONE+" TEXT);"; public ShareDbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(STRING_CREATE); ContentValues cv = new ContentValues(3); cv.put(COL_FIRST, "John"); cv.put(COL_LAST, "Doe"); cv.put(COL_PHONE, "8885551234"); db.insert(TABLE_NAME, null, cv); cv = new ContentValues(3); cv.put(COL_FIRST, "Jane"); cv.put(COL_LAST, "Doe"); cv.put(COL_PHONE, "8885552345"); db.insert(TABLE_NAME, null, cv); cv = new ContentValues(3); cv.put(COL_FIRST, "Jill"); cv.put(COL_LAST, "Doe"); cv.put(COL_PHONE, "8885553456"); db.insert(TABLE_NAME, null, cv); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); onCreate(db); } }