ContentProvider模板
来源:互联网 发布:知乎匿名提问在哪里看 编辑:程序博客网 时间:2024/06/07 01:20
package com.lenovo.seeplus.provider;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "seeplus.db"; public static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists " + Provider.UserColumns.TABLE_NAME + "(" + Provider.UserColumns._ID + " integer primary key autoincrement," + Provider.UserColumns.USERNAME + " text,"//username + Provider.UserColumns.BOOTH_STATUS + " int default 0,"//1-yes,0-no + Provider.UserColumns.AVATAR + " blob,"//avatar bytes + Provider.UserColumns.CURRENT_USER + " int default 0," //1-current + Provider.UserColumns.PATH + " text,"//embeddings.txt path + Provider.UserColumns.TIMESTAMPS + " long,"//create time + Provider.UserColumns.SENDER + " text,"//contact name + Provider.UserColumns.MESSAGE + " text);");//message content db.execSQL("create table if not exists " + Provider.EventColumns.TABLE_NAME + "(" + Provider.EventColumns._ID + " integer primary key autoincrement," + Provider.EventColumns.USER_ID + " integer not null,"//userId + Provider.EventColumns.TITLE + " text,"//event title + Provider.EventColumns.DATE + " long,"//event date + Provider.EventColumns.STARTTIME + " text,"//16:00 + Provider.EventColumns.ENDTTIME + " text,"//17:00 + Provider.EventColumns.LOCATION + " text);");//event location } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists " + Provider.UserColumns.TABLE_NAME); db.execSQL("drop table if exists " + Provider.EventColumns.TABLE_NAME); onCreate(db); }}
package com.lenovo.seeplus.provider;import android.net.Uri;import android.provider.BaseColumns;public class Provider { public static final String AUTHORITY = "com.lenovo.seeplus"; public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.lenovo.seeplus"; public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.lenovo.seeplus"; public static final class UserColumns implements BaseColumns { public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/user"); public static final String TABLE_NAME = "user"; public static final String USERNAME = "username"; public static final String BOOTH_STATUS = "booth_status"; public static final String TIMESTAMPS = "timestamps"; public static final String MESSAGE = "message"; public static final String SENDER = "sender"; public static final String AVATAR = "avatar"; public static final String CURRENT_USER = "current_user"; public static final String PATH = "path"; } public static final class EventColumns implements BaseColumns { public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/event"); public static final String TABLE_NAME = "event"; public static final String USER_ID = "userId"; public static final String TITLE = "title"; public static final String DATE = "date"; public static final String STARTTIME = "starttime"; public static final String ENDTTIME = "endtime"; public static final String LOCATION = "location"; }}
package com.lenovo.seeplus.provider;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteQueryBuilder;import android.net.Uri;import android.text.TextUtils;import android.util.Log;import java.util.HashMap;public class UserProvider extends ContentProvider { private static final String TAG = UserProvider.class.getSimpleName(); private static final int USER = 1; private static final int USER_ID = 2; private static final int EVENT = 3; private static final int EVENT_ID = 4; private static final UriMatcher uriMatcher; private static HashMap<String, String> mUserProjectionMap; private static HashMap<String, String> mEventProjectionMap; static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(Provider.AUTHORITY, "user", USER); uriMatcher.addURI(Provider.AUTHORITY, "user/#", USER_ID); // 这里要增加另一张表的匹配项 uriMatcher.addURI(Provider.AUTHORITY, "event", EVENT); uriMatcher.addURI(Provider.AUTHORITY, "event/#", EVENT_ID); // 保存所有表用到的字段 mUserProjectionMap = new HashMap<>(); mUserProjectionMap.put(Provider.UserColumns._ID, Provider.UserColumns._ID); mUserProjectionMap.put(Provider.UserColumns.USERNAME, Provider.UserColumns.USERNAME); mUserProjectionMap.put(Provider.UserColumns.MESSAGE, Provider.UserColumns.MESSAGE); mUserProjectionMap.put(Provider.UserColumns.SENDER, Provider.UserColumns.SENDER); mUserProjectionMap.put(Provider.UserColumns.AVATAR, Provider.UserColumns.AVATAR); mUserProjectionMap.put(Provider.UserColumns.TIMESTAMPS, Provider.UserColumns.TIMESTAMPS); mUserProjectionMap.put(Provider.UserColumns.CURRENT_USER, Provider.UserColumns.CURRENT_USER); mUserProjectionMap.put(Provider.UserColumns.BOOTH_STATUS, Provider.UserColumns.BOOTH_STATUS); mUserProjectionMap.put(Provider.UserColumns.PATH, Provider.UserColumns.PATH); mEventProjectionMap = new HashMap<>(); mEventProjectionMap.put(Provider.EventColumns._ID, Provider.EventColumns._ID); mEventProjectionMap.put(Provider.EventColumns.USER_ID, Provider.EventColumns.USER_ID); mEventProjectionMap.put(Provider.EventColumns.TITLE, Provider.EventColumns.TITLE); mEventProjectionMap.put(Provider.EventColumns.STARTTIME, Provider.EventColumns.STARTTIME); mEventProjectionMap.put(Provider.EventColumns.ENDTTIME, Provider.EventColumns.ENDTTIME); mEventProjectionMap.put(Provider.EventColumns.LOCATION, Provider.EventColumns.LOCATION); mEventProjectionMap.put(Provider.EventColumns.DATE, Provider.EventColumns.DATE); } private DatabaseHelper dbHelper = null; @Override public boolean onCreate() { Log.i(TAG, "Provider Create"); dbHelper = new DatabaseHelper(getContext()); return true; } @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)) { // 这里也要增加匹配项 case USER: case EVENT: return Provider.CONTENT_TYPE; case USER_ID: case EVENT_ID: return Provider.CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri); } } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); String orderBy; switch (uriMatcher.match(uri)) { // 这里要对不同表的匹配结果做不同处理 case USER: case USER_ID: qb.setTables(Provider.UserColumns.TABLE_NAME); // If no sort order is specified use the default orderBy = sortOrder; break; case EVENT: case EVENT_ID: qb.setTables(Provider.EventColumns.TABLE_NAME); // If no sort order is specified use the default orderBy = sortOrder; break; default: throw new IllegalArgumentException("Unknown URI " + uri); } switch (uriMatcher.match(uri)) { case USER: qb.setProjectionMap(mUserProjectionMap); break; case EVENT: qb.setProjectionMap(mEventProjectionMap); break; case USER_ID: qb.setProjectionMap(mUserProjectionMap); qb.appendWhere(Provider.UserColumns._ID + "=" + uri.getPathSegments().get(1)); break; case EVENT_ID: qb.setProjectionMap(mEventProjectionMap); qb.appendWhere(Provider.EventColumns._ID + "=" + uri.getPathSegments().get(1)); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } // Get the database and run the query SQLiteDatabase db = dbHelper.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 Uri insert(Uri uri, ContentValues initialValues) { ContentValues values; if (initialValues != null) { values = initialValues; } else { values = new ContentValues(); } String tableName; switch (uriMatcher.match(uri)) { // 这里要对不同表的匹配结果做不同处理 case USER: tableName = Provider.UserColumns.TABLE_NAME; break; case EVENT: tableName = Provider.EventColumns.TABLE_NAME; break; default: // Validate the requested uri throw new IllegalArgumentException("Unknown URI " + uri); } SQLiteDatabase db = dbHelper.getWritableDatabase(); long rowId = db.insert(tableName, null, values); if (rowId > 0) { Uri noteUri = ContentUris.withAppendedId(uri, rowId); getContext().getContentResolver().notifyChange(noteUri, null); return noteUri; } throw new SQLException("Failed to insert row into " + uri); } @Override public int delete(Uri uri, String where, String[] whereArgs) { SQLiteDatabase db = dbHelper.getWritableDatabase(); int count; switch (uriMatcher.match(uri)) { // 这里要对不同表的匹配结果做不同处理,注意下面用到的表名不要弄错了 case USER: count = db.delete(Provider.UserColumns.TABLE_NAME, where, whereArgs); break; case USER_ID: String userId = uri.getPathSegments().get(1); count = db.delete(Provider.UserColumns.TABLE_NAME, Provider.UserColumns._ID + "=" + userId + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs); break; case EVENT: count = db.delete(Provider.EventColumns.TABLE_NAME, where, whereArgs); break; case EVENT_ID: String eventId = uri.getPathSegments().get(1); count = db.delete(Provider.EventColumns.TABLE_NAME, Provider.EventColumns._ID + "=" + eventId + (!TextUtils.isEmpty(where) ? " AND (" + 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 = dbHelper.getWritableDatabase(); int count; switch (uriMatcher.match(uri)) { // 这里要对不同表的匹配结果做不同处理,注意下面用到的表名不要弄错了 case USER: count = db.update(Provider.UserColumns.TABLE_NAME, values, where, whereArgs); break; case USER_ID: String userId = uri.getPathSegments().get(1); count = db.update(Provider.UserColumns.TABLE_NAME, values, Provider.UserColumns._ID + "=" + userId + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs); break; case EVENT: count = db.update(Provider.EventColumns.TABLE_NAME, values, where, whereArgs); break; case EVENT_ID: String eventId = uri.getPathSegments().get(1); count = db.update(Provider.EventColumns.TABLE_NAME, values, Provider.EventColumns._ID + "=" + eventId + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs); break; default: throw new IllegalArgumentException("Unknown URI " + uri); } getContext().getContentResolver().notifyChange(uri, null); return count; }}
关于A SQLiteConnection object for database ‘/data/dbstar/xxx.db’ was leaked! 的解决办法:及时释放Cursor和SQLiteDatabase对象。如下finally模块所示:
private long save2DB(String path) { DatabaseHelper helper = new DatabaseHelper(this); SQLiteDatabase db = helper.getReadableDatabase(); long userId = 0; try { ContentValues values = new ContentValues(); values.put(Provider.UserColumns.USERNAME, username); values.put(Provider.UserColumns.TIMESTAMPS, System.currentTimeMillis()); values.put(Provider.UserColumns.SENDER, sender); values.put(Provider.UserColumns.MESSAGE, message); values.put(Provider.UserColumns.AVATAR, bitmapBytes); values.put(Provider.UserColumns.PATH, path); db.execSQL("update " + Provider.UserColumns.TABLE_NAME + " set " + Provider.UserColumns.CURRENT_USER + "=0 where " + Provider.UserColumns.CURRENT_USER + "=1"); values.put(Provider.UserColumns.CURRENT_USER, 1); userId = db.insert(Provider.UserColumns.TABLE_NAME, null, values); long date = 0; switch (event_date) { case "今天": date = System.currentTimeMillis(); break; case "明天": date = System.currentTimeMillis() + 24 * 60 * 60 * 1000; break; case "后天": date = System.currentTimeMillis() + 24 * 60 * 60 * 1000 * 2; break; } for (int i = 0; i < lv_event_list.getAdapter().getCount(); i++) { ContentValues cv = new ContentValues(); Event event = eventList.get(i); Log.i(TAG, event.toString()); cv.put(Provider.EventColumns.USER_ID, userId); cv.put(Provider.EventColumns.TITLE, event.getTitle()); cv.put(Provider.EventColumns.STARTTIME, event.getStarttime()); cv.put(Provider.EventColumns.DATE, date); long eventId = db.insert(Provider.EventColumns.TABLE_NAME, null, cv); Log.i(TAG, "eventId = " + eventId); } } catch (SQLException e) { e.printStackTrace(); } finally { if (db != null && db.isOpen()) { db.close(); db = null; } } return userId; }
private void initEventList() { DatabaseHelper helper = new DatabaseHelper(this); SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = null; try { cursor = db.query(Provider.EventColumns.TABLE_NAME, null, Provider.EventColumns.USER_ID + "=?", new String[]{String.valueOf(mUserId)}, null, null, null); if (cursor != null) { eventList.clear(); while (cursor.moveToNext()) { String title = cursor.getString(cursor.getColumnIndex(Provider.EventColumns.TITLE)); String startTime = cursor.getString(cursor.getColumnIndex(Provider.EventColumns.STARTTIME)); mEventDate = cursor.getLong(cursor.getColumnIndex(Provider.EventColumns.DATE)); Event event = new Event(); event.setTitle(title); event.setStarttime(startTime); eventList.add(event); } } } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } if (db != null && db.isOpen()) { db.close(); db = null; } } }
阅读全文
0 0
- ContentProvider模板
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentprovider
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentprovider
- contentprovider
- ContentProvider
- AES加解密在php接口请求过程中的应用
- yuda
- LeakCanary——直白的展现Android中的内存泄露
- 序列化与反序列化
- -Mastering KVM Virtualization-:第三章 搭建独立的KVM虚拟化
- ContentProvider模板
- 15.2-全栈Java笔记:ActionEvent事件类型可以实现哪些功能?
- Android xUtils3源码解析之网络模块
- android 多线程实现方式
- 测试1
- 定位深入理解CSS定位中的偏移
- for循环打印金字塔
- 使用logstash将kafka数据入到elasticsearch
- Qt Designer中利用各个控件来setStyleSheet