MyNotes(ContentProvider实例)
package com.android.notes;
import java.util.Calendar;
import java.util.HashMap;
import javax.crypto.SecretKey;
import com.android.provider.Notes;
import com.android.provider.Notes.Key;
import com.android.provider.Notes.Note;
import com.android.provider.Notes.User;
import com.android.provider.Notes.WidgetColumns;
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.provider.Contacts.Groups;
import android.text.TextUtils;
import android.util.Log;
public class NotesProvider extends ContentProvider{
private static final String TAG = "NotesProvider";
private static final String DATABASE_NAME = "notes.db";
private static final int DATABASE_VERSION = 2;
private static final String NOTES_TABLE_NAME = "note";
private static final String USER_TABLE_NAME = "user";
private static final String KEY_TABLE_NAME = "key";
private static final String WIDGET_TABLE_NAME = "widget_provider";
private static HashMap
private static HashMap
private static HashMap
private static HashMap
private static final int NOTES = 1;
private static final int NOTE_ID = 2;
private static final int USERS = 3;
private static final int USER_ID = 4;
private static final int KEYS = 5;
private static final int WIDGETS = 6;
private static final UriMatcher sUriMatcher;
/**
* This class helps open, create, and upgrade the database file.
*/
public static class DatabaseHelper extends SQLiteOpenHelper {
// public static SecretKey KEY;
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
System.out.println("*********************************************The first time create db");
db.execSQL("CREATE TABLE " + USER_TABLE_NAME + " ("
+ User._ID + " INTEGER PRIMARY KEY,"
+ User.NAME + " TEXT,"
+ User.PASSWORD + " TEXT,"
+ User.QUESTION + " TEXT,"
+ User.ANSWER + " TEXT,"
+ User.CREATE_DATE + " TEXT"
+ ");");
db.execSQL("CREATE TABLE " + NOTES_TABLE_NAME + " ("
+ Note._ID + " INTEGER PRIMARY KEY,"
+ Note.TITLE + " TEXT,"
+ Note.CONTENT + " TEXT,"
+ Note.MODIFIED_DATE + " TEXT,"
+ Note.ACCESS + " TEXT,"
+ Note.HOUR + " INTEGER,"
+ Note.MINUTE + " INTEGER,"
+ Note.USER + " INTEGER REFERENCES user(_id)"
+ ");");
db.execSQL("CREATE TABLE key(_id INTEGER PRIMARY KEY, key TEXT);");
db.execSQL("CREATE TABLE " + WIDGET_TABLE_NAME + " ("
+ WidgetColumns._ID + " INTEGER PRIMARY KEY,"
+ WidgetColumns.NOTEID + " INTEGER REFERENCES note(_id)"
+ ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS note");
db.execSQL("DROP TABLE IF EXISTS user");
db.execSQL("DROP TABLE IF EXISTS key");
db.execSQL("DROP TABLE IF EXISTS widget_provider");
onCreate(db);
}
}
private DatabaseHelper mOpenHelper;
@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 NOTES:
qb.setTables(NOTES_TABLE_NAME);
qb.setProjectionMap(sNotesProjectionMap);
break;
case NOTE_ID:
qb.setTables(NOTES_TABLE_NAME);
qb.setProjectionMap(sNotesProjectionMap);
qb.appendWhere(Note._ID + "=" + uri.getPathSegments().get(1));
break;
case USERS:
qb.setTables(USER_TABLE_NAME);
qb.setProjectionMap(sUsersProjectionMap);
break;
case USER_ID:
qb.setTables(USER_TABLE_NAME);
qb.setProjectionMap(sUsersProjectionMap);
qb.appendWhere(User._ID + "=" + uri.getPathSegments().get(1));
break;
case KEYS:
qb.setTables(KEY_TABLE_NAME);
qb.setProjectionMap(sKeysProjectionMap);
break;
case WIDGETS:
qb.setTables(WIDGET_TABLE_NAME);
qb.setProjectionMap(sWidgetProjectionMap);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
// If no sort order is specified use the default
String orderBy;
if (TextUtils.isEmpty(sortOrder)) {
orderBy = Notes.Note.DEFAULT_SORT_ORDER;
} else {
orderBy = sortOrder;
}
// Get the database and run the query
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
// Tell the cursor what uri to watch, so it knows when its source data changes
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
@Override
public String getType(Uri uri) {
switch (sUriMatcher.match(uri)) {
case NOTES:
return Note.CONTENT_TYPE;
case NOTE_ID:
return Note.CONTENT_ITEM_TYPE;
case USERS:
return User.CONTENT_TYPE;
case USER_ID:
return User.CONTENT_ITEM_TYPE;
case KEYS:
return Key.CONTENT_TYPE;
case WIDGETS:
return WidgetColumns.CONTENT_TYPE;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
private StringBuffer date;
public void setDate(){
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
int month=calendar.get(Calendar.MONTH)+1;
int day=calendar.get(Calendar.DATE);
int t=calendar.get(Calendar.DAY_OF_WEEK);
String week[] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
String tmpYear = "年";
String tmpMonth = "月";
String tmpDay = "日";
date=new StringBuffer();
date.append(year);
if(month<10)
date.append(tmpYear + "0");
else
date.append(tmpYear);
date.append(month);
if(day<10)
date.append(tmpMonth + "0");
else
date.append(tmpMonth);
date.append(day);
date.append(tmpDay);
date.append(" ");
date.append(week[t-1]);
}
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
setDate();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
ContentValues values;
if (initialValues != null) {
values = new ContentValues(initialValues);
} else {
values = new ContentValues();
}
if (sUriMatcher.match(uri) == NOTES){
// Make sure that the fields are all set
if (values.containsKey(Note.MODIFIED_DATE) == false) {
values.put(Note.MODIFIED_DATE, date.toString());
}
if (values.containsKey(Note.TITLE) == false) {
Resources r = Resources.getSystem();
values.put(Note.TITLE, r.getString(R.string.untitled));
}
if (values.containsKey(Note.CONTENT) == false) {
values.put(Note.CONTENT, "");
}
if (values.containsKey(Note.ACCESS) == false) {
values.put(Note.ACCESS, "");
}
if (values.containsKey(Note.USER) == false) {
values.put(Note.USER, "0");
}
long rowId = db.insert(NOTES_TABLE_NAME, Note.TITLE, values);
if (rowId > 0) {
Uri noteUri = ContentUris.withAppendedId(Note.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(noteUri, null);
return noteUri;
}
}else if (sUriMatcher.match(uri) == USERS){
// Make sure that the fields are all set
if (values.containsKey(User.CREATE_DATE) == false) {
values.put(User.CREATE_DATE, date.toString());
}
if (values.containsKey(User.NAME) == false) {
Resources r = Resources.getSystem();
values.put(User.NAME, r.getString(R.string.no_user));
}
if (values.containsKey(User.PASSWORD) == false) {
values.put(User.PASSWORD, "");
}
if (values.containsKey(User.QUESTION) == false) {
values.put(User.QUESTION, "");
}
if (values.containsKey(User.ANSWER) == false) {
values.put(User.ANSWER, "");
}
long rowId = db.insert(USER_TABLE_NAME, User.NAME, values);
if (rowId > 0) {
Uri userUri = ContentUris.withAppendedId(User.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(userUri, null);
return userUri;
}
}else if (sUriMatcher.match(uri) == KEYS){
if (values.containsKey(Key.KEY) == false){
values.put(Key.KEY, " ");
}
long rowId = db.insert(KEY_TABLE_NAME, Key.KEY, values);
if (rowId > 0){
Uri keyUri = ContentUris.withAppendedId(Key.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(keyUri, null);
return keyUri;
}
}else if (sUriMatcher.match(uri) == WIDGETS){
if (values.containsKey(WidgetColumns._ID) == false){
values.put(WidgetColumns._ID, " ");
}
long rowId = db.insert(WIDGET_TABLE_NAME, WidgetColumns._ID, values);
if (rowId > 0){
Uri widgetUri = ContentUris.withAppendedId(WidgetColumns.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(widgetUri, null);
return widgetUri;
}
}
throw new SQLException("Failed to insert row into " + uri);
}
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int count;
switch (sUriMatcher.match(uri)) {
case NOTES:
count = db.delete(NOTES_TABLE_NAME, where, whereArgs);
break;
case NOTE_ID:
String noteId = uri.getPathSegments().get(1);
count = db.delete(NOTES_TABLE_NAME, Note._ID + "=" + noteId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
case USERS:
count = db.delete(USER_TABLE_NAME, where, whereArgs);
break;
case USER_ID:
String userId = uri.getPathSegments().get(1);
count = db.delete(USER_TABLE_NAME, User._ID + "=" + userId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
case KEYS:
count = db.delete(KEY_TABLE_NAME, where, whereArgs);
break;
case WIDGETS:
count = db.delete(WIDGET_TABLE_NAME, where, whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
@Override
public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int count;
switch (sUriMatcher.match(uri)) {
case NOTES:
count = db.update(NOTES_TABLE_NAME, values, where, whereArgs);
break;
case NOTE_ID:
String noteId = uri.getPathSegments().get(1);
count = db.update(NOTES_TABLE_NAME, values, Note._ID + "=" + noteId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
case USERS:
count = db.update(USER_TABLE_NAME, values, where, whereArgs);
break;
case USER_ID:
String userId = uri.getPathSegments().get(1);
count = db.update(USER_TABLE_NAME, values, User._ID + "=" + userId
+ (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);
break;
case KEYS:
count = db.update(KEY_TABLE_NAME, values, where, whereArgs);
break;
case WIDGETS:
count = db.update(WIDGET_TABLE_NAME, values, where, whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(Notes.AUTHORITY, "note", NOTES);
sUriMatcher.addURI(Notes.AUTHORITY, "note/#", NOTE_ID);
sUriMatcher.addURI(Notes.AUTHORITY, "user", USERS);
sUriMatcher.addURI(Notes.AUTHORITY, "user/#", USER_ID);
sUriMatcher.addURI(Notes.AUTHORITY, "key", KEYS);
sUriMatcher.addURI(Notes.AUTHORITY, "widget", WIDGETS);
sNotesProjectionMap = new HashMap
sNotesProjectionMap.put(Note._ID, Note._ID);
sNotesProjectionMap.put(Note.TITLE, Note.TITLE);
sNotesProjectionMap.put(Note.CONTENT, Note.CONTENT);
sNotesProjectionMap.put(Note.ACCESS, Note.ACCESS);
sNotesProjectionMap.put(Note.USER, Note.USER);
sNotesProjectionMap.put(Note.MODIFIED_DATE, Note.MODIFIED_DATE);
sNotesProjectionMap.put(Note.HOUR, Note.HOUR);
sNotesProjectionMap.put(Note.MINUTE, Note.MINUTE);
sUsersProjectionMap = new HashMap
sUsersProjectionMap.put(User._ID, User._ID);
sUsersProjectionMap.put(User.NAME, User.NAME);
sUsersProjectionMap.put(User.PASSWORD, User.PASSWORD);
sUsersProjectionMap.put(User.QUESTION, User.QUESTION);
sUsersProjectionMap.put(User.ANSWER, User.ANSWER);
sUsersProjectionMap.put(User.CREATE_DATE, User.CREATE_DATE);
sKeysProjectionMap = new HashMap
sKeysProjectionMap.put(Key._ID, Key._ID);
sKeysProjectionMap.put(Key.KEY, Key.KEY);
sWidgetProjectionMap = new HashMap
sWidgetProjectionMap.put(WidgetColumns._ID, WidgetColumns._ID);
sWidgetProjectionMap.put(WidgetColumns.NOTEID, WidgetColumns.NOTEID);
}
}
更多相关文章
- Android实现聊天型笔记编辑器
- Android(安卓)Gson使用入门及GsonFormat插件的使用
- 如何修改Android系统默认时间
- android获取今天周几的示例
- android 工具类 DateUtil
- android 根据设置的日期获取星期几
- Android(安卓)中 AlertDialog 的多种创建方式(二)
- android 仿课程表,时间星期展示选择列表,简单易懂
- android小片段