ContactsProvider的使用
生活随笔
收集整理的這篇文章主要介紹了
ContactsProvider的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個東西就是Android用來共享數據的,沒啥太多的東西,我也只會用,簡單的了解了下原理跟使用
先上個代碼
public class ContactsProvider extends ContentProvider {//主機地址 當前類的完整路徑public static final String AUTHORITIES = "com.yide.yide.provider.ContactsProvider";//ContentProvider.class.getCanonicalName();//地址匹配對象static UriMatcher mUriMatcher;public static final int CONTACT = 1;//對應聯系人表的uri常量AUTHORITIESpublic static Uri URI_CONTACT = Uri.parse("content://"+AUTHORITIES+"/contact");static {mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);//添加一個匹配的規則mUriMatcher.addURI(AUTHORITIES,"/contact",CONTACT);}private ContactOpenHelper mHelper;@Overridepublic boolean onCreate() {mHelper = new ContactOpenHelper(getContext()); // if (mHelper != null){ // return true; // } // return false;return true;}@Nullable@Overridepublic String getType(@NonNull Uri uri) {return null;}@Nullable@Overridepublic Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {//數據存到數據庫 創建db文件 創建表int code = mUriMatcher.match(uri);switch (code){case CONTACT:SQLiteDatabase db = mHelper.getWritableDatabase(); // mHelper.onUpgrade(db,1,2); // db = mHelper.getWritableDatabase();long id = db.insert(ContactOpenHelper.T_CONTACT, "", values);if (id > 0 ){System.out.println("----------ContanctProvider 添加成功");//拼接最新uriuri = ContentUris.withAppendedId(uri,id);}break;default:break;}return uri;}@Overridepublic int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {int code = mUriMatcher.match(uri);int deleteCount = 0;switch (code){case CONTACT:SQLiteDatabase db = mHelper.getWritableDatabase();deleteCount = db.delete(ContactOpenHelper.T_CONTACT, selection, selectionArgs);if (deleteCount > 0){System.out.println("----------ContanctProvider 刪除成功");}break;default:break;}return deleteCount;}@Overridepublic int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {int updateCount = 0;int code = mUriMatcher.match(uri);switch (code){case CONTACT:SQLiteDatabase db = mHelper.getWritableDatabase();updateCount = db.update(ContactOpenHelper.T_CONTACT, values, selection, selectionArgs);if (updateCount >0){System.out.println("----------ContanctProvider 更新成功");}break;default:break;}return updateCount;}@Nullable@Overridepublic Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {Cursor query = null;int code = mUriMatcher.match(uri);switch (code){case CONTACT:SQLiteDatabase db = mHelper.getWritableDatabase();query = db.query(ContactOpenHelper.T_CONTACT, projection, selection, selectionArgs, null, null, sortOrder);System.out.println("----------ContanctProvider 查詢成功");break;default:break;}return query;} }一般用到這個類都會需要一個extends SQLiteOpenHelper這個東西,就是創建數據庫的,一般通過上邊那個類(ContactsProvider)來操作這個東西
代碼
public class ContactOpenHelper extends SQLiteOpenHelper {public static final String T_CONTACT = "t_contact";/*** 數據庫版本*/private static final int DATABASE_VERSION = 1;/*** 數據庫名稱*/private static final String DATABASE_NAME = "con.db";public class ContactTable implements BaseColumns{//默認添加字段信息(一列)public static final String _ID = "_id";//賬號public static final String ACCOUNT = "account";//賬號public static final String NICKNAME = "nickname";//昵稱public static final String HEADIMAGE = "headimage";//頭像public static final String PINYIN = "pinyin";//賬號拼音}public ContactOpenHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Override //創建數據庫調用這個類public void onCreate(SQLiteDatabase db) {//創建數據表String sql =("create table if not exists "+T_CONTACT+"" +"("+ContactTable._ID+" integer primary key autoincrement," +""+ContactTable.ACCOUNT+" text not null,"+ContactTable.NICKNAME+" text not null," +""+ContactTable.HEADIMAGE+" text not null,"+ContactTable.PINYIN+" text not null)");//插入數據db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} }但這這個數據庫的創建,我被坑的莫夢奇妙,直接就是創建不了,所以后續的操作就做不了,也就是說,對這個數據庫中的表進行插入的時候,他不會報錯,但是進行其他操作的話就會報錯,而且,根本就沒有你創建的表,更沒有數據庫,后來我改了一下數據庫名稱,就沒事了 ??????然后就沒事了???不知道為啥,可能是因為我在測試的時候,數據庫名稱沒有加.db,之后還有的之歌名稱,只不過加上了.db的原因吧,不曉得不曉得。。。
哦,對了,這個ContentProvider的使用,還需要在清單文件里進行provider一下,這里邊有很多參數,隨便搜一下就有,我就不說了,OK就這樣記錄一下,后期有機會再補充詳細的。
<providerandroid:name="com.provider.ContactsProvider"android:authorities="com.provider.ContactsProvider"/>```總結
以上是生活随笔為你收集整理的ContactsProvider的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx报错502:connect()
- 下一篇: 从零开始学USB(三、基础知识3)