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);
}
}