ContentProvider:
Introduction:
A content provider manages access to a central repository of data. A provider is part of an Android application, which often provides its own UI for working with the data. A content provider presents data to external applications as one or more tables that are similar to the tables found in a relational database. A row represents an instance of some type of data the provider collects, and each row in the column represents an individual piece of data collected for an instance.
Content provider has functions such as query, insert, update, delete, getType and onCreate. Every ContentProvider has a public URI, which maps to the table in content provider. ContentResolver is used to access the data from a content provider.
Define a URI
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/diaries");
Define a class which constructing query and rewrite content provider
import java.util.Calendar;import java.util.HashMap;
import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.content.res.Resources;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteQueryBuilder;import android.net.Uri;import android.text.TextUtils;import android.util.Log; import com.szy.demo.Diary.DiaryColumns; public class DiaryContentProvider extends ContentProvider {
private static final String DATABASE_NAME = "database";
private static final int DATABASE_VERSION = 3;
private static final String DIARY_TABLE_NAME = "diary";
private static final int DIARIES = 1;
private static final int DIARY_ID = 2;
private static final UriMatcher sUriMatcher;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) {
Log.i("jinyanshitai", "onCreate(SQLiteDatabase db)"); String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " (" + DiaryColumns._ID + " INTEGER PRIMARY KEY," + DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");"; // sql ="CREATE TABLE " + DIARY_TABLE_NAME + " (" + DiaryColumns._ID + " INTEGER PRIMARY KEY," + DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");"; // Log.i("jinyanshitai", "sql="+sql); db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("jinyanshitai", " onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)=" + newVersion); db.execSQL("DROP TABLE IF EXISTS diary"); onCreate(db); } } private DatabaseHelper mOpenHelper; static { sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(Diary.AUTHORITY, "diaries", DIARIES); sUriMatcher.addURI(Diary.AUTHORITY, "diaries/#", DIARY_ID); } @Override public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext()); return true;
} @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); switch (sUriMatcher.match(uri)) { case DIARIES:
qb.setTables(DIARY_TABLE_NAME); break; case DIARY_ID:
qb.setTables(DIARY_TABLE_NAME); qb.appendWhere(DiaryColumns._ID + "=" + uri.getPathSegments().get(1)); break; default: throw new IllegalArgumentException("Unknown URI " + uri);
} String orderBy; if (TextUtils.isEmpty(sortOrder)) { orderBy = Diary.DiaryColumns.DEFAULT_SORT_ORDER; } else { orderBy = sortOrder; } SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy); return c; } @Override public String getType(Uri uri) { switch (sUriMatcher.match(uri)) { case DIARIES:
return DiaryColumns.CONTENT_TYPE; case DIARY_ID:
return DiaryColumns.CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri);
} } @Override public Uri insert(Uri uri, ContentValues initialValues) { if (sUriMatcher.match(uri) != DIARIES) { throw new IllegalArgumentException("Unknown URI " + uri);
} ContentValues values; if (initialValues != null) { values = new ContentValues(initialValues); } else { values = new ContentValues(); } if (values.containsKey(Diary.DiaryColumns.CREATED) == false) { values.put(Diary.DiaryColumns.CREATED, getFormateCreatedDate()); } if (values.containsKey(Diary.DiaryColumns.TITLE) == false) { Resources r = Resources.getSystem(); values.put(Diary.DiaryColumns.TITLE, r .getString(android.R.string.untitled)); } if (values.containsKey(Diary.DiaryColumns.BODY) == false) { values.put(Diary.DiaryColumns.BODY, ""); } SQLiteDatabase db = mOpenHelper.getWritableDatabase(); long rowId = db.insert(DIARY_TABLE_NAME, DiaryColumns.BODY, values); if (rowId > 0) { Uri diaryUri = ContentUris.withAppendedId( Diary.DiaryColumns.CONTENT_URI, rowId); return diaryUri; } throw new SQLException("Failed to insert row into " + uri);
} @Override public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String rowId = uri.getPathSegments().get(1); return db .delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null); } @Override public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String rowId = uri.getPathSegments().get(1); return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "=" + rowId, null); } public static String getFormateCreatedDate() {
Calendar calendar = Calendar.getInstance(); String created = calendar.get(Calendar.YEAR) + "/" + calendar.get(Calendar.MONTH) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ""; return created; }}
Using ContentResolver to insert and update
getContentResolver().insert(Diary.DiaryColumns.CONTENT_URI, values);
getContentResolver().update(mUri, values,null, null);
Taking an example: make a note book or diary using content provider
User can add dairy by clicking menu button:
After click Add New Diary
After clicking confirm button
You can click this item, then update or delete after clicking menu button
First, make a project
Android version 2.3.3
There are four files: Homework_project_demo2Activity.java, Diary.java, DiaryContentProvider.java, ActivityDiaryEditor.java
Create new xml in res/layout, diary_edit.xml, diary_list.xml, diary_row.xml
Code in AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.szy.demo" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" >
<provider android:name="DiaryContentProvider"
android:authorities="Homework_project_demo.diarycontentprovider" />
<activity android:name=".Homework_project_demo2Activity" android:label="@string/app_name" >
<intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </activity> <activity android:name="ActivityDiaryEditor"
android:theme="@android:style/Theme.Light" android:label="@string/title_diary"> <intent-filter >
<action android:name="Homework_project_demo.ActivityDiaryEditor.EDIT_DIARY" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.diary" />
</intent-filter> <intent-filter >
<action android:name="Homework_project_demo.ActivityDiaryEditor.action.INSERT_DIARY" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.diary" />
</intent-filter> </activity> </application> </manifest>Code in res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="menu_delete">Delete Diary</string>
<string name="menu_insert">Add New Diary</string>
<string name="menu_revert">Revert</string>
<string name="menu_discard">Not Save</string>
<string name="resolve_edit">Edite Diary</string>
<string name="resolve_title">Edite title</string>
<string name="title_create">Create New Diary</string>
<string name="title_edit">Edite Diary</string>
<string name="title_diares_list">Diary</string>
<string name="title_diary">Diary</string>
<string name="title_edit_title">Diary Title:</string>
<string name="title">Title:</string>
<string name="body">Content:</string>
<string name="confirm">Confirm</string>
<string name="app_name">My Diary</string>
<string name="button_ok">OK</string>
<string name="error_title">Error</string>
<string name="error_message">Error loading note</string>
</resources>Code in res/layout/diary_edit.xml
<?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"> <LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/title"
android:padding="2px" />
<EditText android:id="@+id/title"
android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" />
</LinearLayout> <TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/body" />
<EditText android:id="@+id/body" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1"
android:scrollbars="vertical" android:gravity="top" />
<Button android:id="@+id/confirm" android:text="@string/confirm"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>Code in res/layout/diary_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@+id/android:list"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<TextView android:id="@+id/android:empty"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="click menu button, begain your diary :)" />
</LinearLayout>Code in res/layout/diary_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/row"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/created" android:layout_width="wrap_content"
android:layout_height="35px" android:layout_alignParentRight="true"
android:layout_marginLeft="10dip" android:layout_marginTop="10dip" android:text="1999/12/3" />
<TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="30px" android:layout_alignParentLeft="true" android:layout_alignTop="@+id/created" android:layout_marginLeft="16dp" android:maxWidth="200dip" android:text="firstrowfirstcolom" android:textSize="22sp" />
</RelativeLayout>
Code in Homework_project_demo2Activity.java
import android.app.ListActivity;import android.content.ContentUris;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.Toast; import com.szy.demo.Diary.DiaryColumns; public class Homework_project_demo2Activity extends ListActivity{ // insert new record public static final int MENU_ITEM_INSERT = Menu.FIRST; // edit content public static final int MENU_ITEM_EDIT = Menu.FIRST + 1; public static final int MENU_ITEM_DELETE = Menu.FIRST + 2; private static final String[] PROJECTION = new String[] { DiaryColumns._ID, DiaryColumns.TITLE, DiaryColumns.CREATED }; private int currentTouchId = -1; private View tempView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.diary_list); Intent intent = getIntent(); if (intent.getData() == null) { intent.setData(DiaryColumns.CONTENT_URI); } Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, DiaryColumns.DEFAULT_SORT_ORDER); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE, DiaryColumns.CREATED}, new int[] {R.id.text1, R.id.created}); setListAdapter(adapter); } @Override protected void onPause(){ //ListView l = getListView(); //l.setSelected(true); //tempView.setSelected(true); super.onPause(); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); System.out.println("menu create"); menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert); return true; } @Override /* * dynamic create menu */ public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); System.out.println("onPrepare"); final boolean haveItems = getListAdapter().getCount() > 0; System.out.println(" " + getListAdapter().getCount()); if (haveItems) { System.out.println("touch id: " + getTouchedItemId()); ListView listView = getListView(); listView.setSelection(getTouchedItemId()); listView.setPressed(true); listView.setFocusableInTouchMode(true); if (getTouchedItemId() > -1) { menu.removeGroup(1); Uri uri = ContentUris.withAppendedId(getIntent().getData(), getTouchedItemId()); Intent intent = new Intent(null, uri); menu.add(1, MENU_ITEM_EDIT, 1, "Edit Diary").setIntent(intent); menu.add(1, MENU_ITEM_DELETE, 1, "Delete Diary"); //resetTouchedItemId(); }else{ menu.removeGroup(1); } }else{ //System.out.println(); menu.removeGroup(1); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // insert record case MENU_ITEM_INSERT: Intent intent0 = new Intent(this, ActivityDiaryEditor.class); intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION); intent0.setData(getIntent().getData()); resetTouchedItemId(); startActivity(intent0); return true; // edit record case MENU_ITEM_EDIT: Intent intent = new Intent(this, ActivityDiaryEditor.class); System.out.println(" " + item.getIntent().getData()); intent.setData(item.getIntent().getData()); intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION); resetTouchedItemId(); startActivity(intent); return true; // delete record case MENU_ITEM_DELETE: Uri uri = ContentUris.withAppendedId(getIntent().getData(), getTouchedItemId()); getContentResolver().delete(uri, null, null); resetTouchedItemId(); renderListView(); } //resetTouchedItemId(); return super.onOptionsItemSelected(item); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { currentTouchId = (int)id; l.setItemChecked(position, true); v.setSelected(true); v.setPressed(true); tempView = v; super.onListItemClick(l, v, position, id); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); renderListView(); } private void renderListView() { Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, DiaryColumns.DEFAULT_SORT_ORDER); SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE, DiaryColumns.CREATED}, new int[] {R.id.text1, R.id.created}); setListAdapter(adapter); System.out.println("rendlist"); tempView.setSelected(true); } protected int getTouchedItemId() { return currentTouchId; } protected void resetTouchedItemId() { currentTouchId = 0; System.out.println("reset id : " + currentTouchId); } }Code in Diary.java
import android.net.Uri;import android.provider.BaseColumns; public final class Diary {
// identify authority public static final String AUTHORITY = "Homework_project_demo.diarycontentprovider";
private Diary() {} /** * Notes table */ public static final class DiaryColumns implements BaseColumns {
// This class cannot be instantiated private DiaryColumns() {} public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/diaries");
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.diary";
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.diary";
public static final String DEFAULT_SORT_ORDER = "created DESC";
public static final String TITLE = "title";
public static final String BODY = "body";
public static final String CREATED = "created";
}}Code in DiaryContentProvider.java
import java.util.Calendar;import java.util.HashMap;
import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.content.UriMatcher;import android.content.res.Resources;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteQueryBuilder;import android.net.Uri;import android.text.TextUtils;import android.util.Log; import com.szy.demo.Diary.DiaryColumns; public class DiaryContentProvider extends ContentProvider {
private static final String DATABASE_NAME = "database";
private static final int DATABASE_VERSION = 3;
private static final String DIARY_TABLE_NAME = "diary";
private static final int DIARIES = 1;
private static final int DIARY_ID = 2;
private static final UriMatcher sUriMatcher;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) {
Log.i("jinyanshitai", "onCreate(SQLiteDatabase db)"); String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " (" + DiaryColumns._ID + " INTEGER PRIMARY KEY," + DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");"; // sql ="CREATE TABLE " + DIARY_TABLE_NAME + " (" + DiaryColumns._ID + " INTEGER PRIMARY KEY," + DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");"; // Log.i("jinyanshitai", "sql="+sql); db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("jinyanshitai", " onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)=" + newVersion); db.execSQL("DROP TABLE IF EXISTS diary"); onCreate(db); } } private DatabaseHelper mOpenHelper; static { sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(Diary.AUTHORITY, "diaries", DIARIES); sUriMatcher.addURI(Diary.AUTHORITY, "diaries/#", DIARY_ID); } @Override public boolean onCreate() {
mOpenHelper = new DatabaseHelper(getContext()); return true;
} @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); switch (sUriMatcher.match(uri)) { case DIARIES:
qb.setTables(DIARY_TABLE_NAME); break; case DIARY_ID:
qb.setTables(DIARY_TABLE_NAME); qb.appendWhere(DiaryColumns._ID + "=" + uri.getPathSegments().get(1)); break; default: throw new IllegalArgumentException("Unknown URI " + uri);
} String orderBy; if (TextUtils.isEmpty(sortOrder)) { orderBy = Diary.DiaryColumns.DEFAULT_SORT_ORDER; } else { orderBy = sortOrder; } SQLiteDatabase db = mOpenHelper.getReadableDatabase(); Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy); return c; } @Override public String getType(Uri uri) { switch (sUriMatcher.match(uri)) { case DIARIES:
return DiaryColumns.CONTENT_TYPE; case DIARY_ID:
return DiaryColumns.CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri);
} } @Override public Uri insert(Uri uri, ContentValues initialValues) { if (sUriMatcher.match(uri) != DIARIES) { throw new IllegalArgumentException("Unknown URI " + uri);
} ContentValues values; if (initialValues != null) { values = new ContentValues(initialValues); } else { values = new ContentValues(); } if (values.containsKey(Diary.DiaryColumns.CREATED) == false) { values.put(Diary.DiaryColumns.CREATED, getFormateCreatedDate()); } if (values.containsKey(Diary.DiaryColumns.TITLE) == false) { Resources r = Resources.getSystem(); values.put(Diary.DiaryColumns.TITLE, r .getString(android.R.string.untitled)); } if (values.containsKey(Diary.DiaryColumns.BODY) == false) { values.put(Diary.DiaryColumns.BODY, ""); } SQLiteDatabase db = mOpenHelper.getWritableDatabase(); long rowId = db.insert(DIARY_TABLE_NAME, DiaryColumns.BODY, values); if (rowId > 0) { Uri diaryUri = ContentUris.withAppendedId( Diary.DiaryColumns.CONTENT_URI, rowId); return diaryUri; } throw new SQLException("Failed to insert row into " + uri);
} @Override public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String rowId = uri.getPathSegments().get(1); return db .delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null); } @Override public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); String rowId = uri.getPathSegments().get(1); return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "=" + rowId, null); } public static String getFormateCreatedDate() {
Calendar calendar = Calendar.getInstance(); //the value of Calendar.MONTH belongs to [0,11] String created = (calendar.get(Calendar.MONTH)+1) + "/"
+ calendar.get(Calendar.DAY_OF_MONTH) + "/" + calendar.get(Calendar.YEAR) + " " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ""; System.out.println("String"); return created; }}
Code in ActivityDiaryEditor.java
import android.app.Activity;import android.content.ComponentName;
import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.Menu;
import android.view.MenuItem;
import android.view.View;import android.widget.Button;import android.widget.EditText; import com.szy.demo.Diary.DiaryColumns; public class ActivityDiaryEditor extends Activity {
private static final String TAG = "Diary";
public static final String EDIT_DIARY_ACTION = "Homework_project_demo.ActivityDiaryEditor.EDIT_DIARY";
public static final String INSERT_DIARY_ACTION = "Homework_project_demo.ActivityDiaryEditor.action.INSERT_DIARY";
/** * cursore */ private static final String[] PROJECTION = new String[] { DiaryColumns._ID, // 0
DiaryColumns.TITLE, DiaryColumns.BODY, // 1 }; private static final int STATE_EDIT = 0;
private static final int STATE_INSERT = 1;
private int mState;
private Uri mUri; private Cursor mCursor; private EditText mTitleText; private EditText mBodyText; private Button confirmButton; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_Black); final Intent intent = getIntent(); final String action = intent.getAction(); setContentView(R.layout.diary_edit); mTitleText = (EditText) findViewById(R.id.title); mBodyText = (EditText) findViewById(R.id.body); confirmButton = (Button) findViewById(R.id.confirm); if (EDIT_DIARY_ACTION.equals(action)) { // edit diary mState = STATE_EDIT; mUri = intent.getData(); mCursor = managedQuery(mUri, PROJECTION, null, null, null); mCursor.moveToFirst(); String title = mCursor.getString(1); mTitleText.setTextKeepState(title); String body = mCursor.getString(2); mBodyText.setTextKeepState(body); setResult(RESULT_OK, (new Intent()).setAction(mUri.toString())); setTitle("Edit Diary"); } else if (INSERT_DIARY_ACTION.equals(action)) {
// build diary mState = STATE_INSERT; setTitle("Create New Diary"); } else { Log.e(TAG, "no such action error"); finish(); return; } confirmButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) {
if (mState == STATE_INSERT) { insertDiary(); } else { updateDiary(); } Intent mIntent = new Intent(); setResult(RESULT_OK, mIntent); finish(); } }); } private void insertDiary() {
String title = mTitleText.getText().toString(); String body = mBodyText.getText().toString(); ContentValues values = new ContentValues(); values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider .getFormateCreatedDate()); values.put(Diary.DiaryColumns.TITLE, title); values.put(Diary.DiaryColumns.BODY, body); getContentResolver().insert(Diary.DiaryColumns.CONTENT_URI, values); } private void updateDiary() {
String title = mTitleText.getText().toString(); String body = mBodyText.getText().toString(); ContentValues values = new ContentValues(); values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider .getFormateCreatedDate()); values.put(Diary.DiaryColumns.TITLE, title); values.put(Diary.DiaryColumns.BODY, body); getContentResolver().update(mUri, values, null, null); }}