亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 系統(tǒng) > Android > 正文

Android組件之ContentProvider(二)

2019-11-11 06:54:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一個(gè)共享生詞本的應(yīng)用以熟悉ContentPRovider和sqlite基本用法:

應(yīng)用dictprovider

Word數(shù)據(jù)封裝類(lèi):

public final class Words{ // 定義該ContentProvider的Authorities public static final String AUTHORITY = "com.example.mrpeng.dictprovider"; // 定義一個(gè)靜態(tài)內(nèi)部類(lèi),定義該ContentProvider所包含的數(shù)據(jù)列的列名 public static final class Word implements BaseColumns { // 定義Content所允許操作的三個(gè)數(shù)據(jù)列 public final static String _ID = "_id"; public final static String WORD = "word"; public final static String DETAIL = "detail"; // 定義該Content提供服務(wù)的兩個(gè)Uri public final static Uri DICT_CONTENT_URI = Uri .parse("content://" + AUTHORITY + "/words"); public final static Uri WORD_CONTENT_URI = Uri .parse("content://" + AUTHORITY + "/word"); }}

自定義的provider

public class DictProvider extends ContentProvider { private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); private static final int WORDS = 1; private static final int WORD = 2; private MyDataBaseHelper dbOpenHelper; static { // 為UriMatcher注冊(cè)兩個(gè)Uri matcher.addURI(Words.AUTHORITY, "words", WORDS); matcher.addURI(Words.AUTHORITY, "word/#", WORD); } // 第一次調(diào)用該DictProvider時(shí),系統(tǒng)先創(chuàng)建DictProvider對(duì)象,并回調(diào)該方法 @Override public boolean onCreate() { dbOpenHelper = new MyDataBaseHelper(this.getContext(), "myDict.db3", 1); return true; } // 返回指定Uri參數(shù)對(duì)應(yīng)的數(shù)據(jù)的MIME類(lèi)型 @Override public String getType(Uri uri) { switch (matcher.match(uri)) { // 如果操作的數(shù)據(jù)是多項(xiàng)記錄 case WORDS: return "vnd.android.cursor.dir/org.crazyit.dict"; // 如果操作的數(shù)據(jù)是單項(xiàng)記錄 case WORD: return "vnd.android.cursor.item/org.crazyit.dict"; default: throw new IllegalArgumentException("未知Uri:" + uri); } } // 查詢(xún)數(shù)據(jù)的方法 @Override public Cursor query(Uri uri, String[] projection, String where, String[] whereArgs, String sortOrder) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); switch (matcher.match(uri)) { // 如果Uri參數(shù)代表操作全部數(shù)據(jù)項(xiàng) case WORDS: // 執(zhí)行查詢(xún) return db.query("dict", projection, where, whereArgs, null, null, sortOrder); // 如果Uri參數(shù)代表操作指定數(shù)據(jù)項(xiàng) case WORD: // 解析出想查詢(xún)的記錄ID long id = ContentUris.parseId(uri); String whereClause = Words.Word._ID + "=" + id; // 如果原來(lái)的where子句存在,拼接where子句 if (where != null && !"".equals(where)) { whereClause = whereClause + " and " + where; Log.e("mrpeng", "whereClause+=where::: " + whereClause); } return db.query("dict", projection, whereClause, whereArgs, null, null, sortOrder); default: throw new IllegalArgumentException("未知Uri:" + uri); } } // 插入數(shù)據(jù)方法 @Override public Uri insert(Uri uri, ContentValues values) { // 獲得數(shù)據(jù)庫(kù)實(shí)例 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); switch (matcher.match(uri)) { // 如果Uri參數(shù)代表操作全部數(shù)據(jù)項(xiàng) case WORDS: // 插入數(shù)據(jù),返回插入記錄的ID long rowId = db.insert("dict", Words.Word._ID, values); // 如果插入成功返回uri if (rowId > 0) { // 在已有的 Uri的后面追加ID Uri wordUri = ContentUris.withAppendedId(uri, rowId); // 通知數(shù)據(jù)已經(jīng)改變 getContext().getContentResolver() .notifyChange(wordUri, null); return wordUri; } break; default: throw new IllegalArgumentException("未知Uri:" + uri); } return null; } // 修改數(shù)據(jù)的方法 @Override public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); // 記錄所修改的記錄數(shù) int num = 0; switch (matcher.match(uri)) { // 如果Uri參數(shù)代表操作全部數(shù)據(jù)項(xiàng) case WORDS: num = db.update("dict", values, where, whereArgs); break; // 如果Uri參數(shù)代表操作指定數(shù)據(jù)項(xiàng) case WORD: // 解析出想修改的記錄ID long id = ContentUris.parseId(uri); String whereClause = Words.Word._ID + "=" + id; // 如果原來(lái)的where子句存在,拼接where子句 if (where != null && !where.equals("")) { whereClause = whereClause + " and " + where; } num = db.update("dict", values, whereClause, whereArgs); break; default: throw new IllegalArgumentException("未知Uri:" + uri); } // 通知數(shù)據(jù)已經(jīng)改變 getContext().getContentResolver().notifyChange(uri, null); return num; } // 刪除數(shù)據(jù)的方法 @Override public int delete(Uri uri, String where, String[] whereArgs) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); // 記錄所刪除的記錄數(shù) int num = 0; // 對(duì)uri進(jìn)行匹配 switch (matcher.match(uri)) { // 如果Uri參數(shù)代表操作全部數(shù)據(jù)項(xiàng) case WORDS: num = db.delete("dict", where, whereArgs); break; // 如果Uri參數(shù)代表操作指定數(shù)據(jù)項(xiàng) case WORD: // 解析出所需要?jiǎng)h除的記錄ID long id = ContentUris.parseId(uri); String whereClause = Words.Word._ID + "=" + id; // 如果原來(lái)的where子句存在,拼接where子句 if (where != null && !where.equals("")) { whereClause = whereClause + " and " + where; } num = db.delete("dict", whereClause, whereArgs); break; default: throw new IllegalArgumentException("未知Uri:" + uri); } // 通知數(shù)據(jù)已經(jīng)改變 getContext().getContentResolver().notifyChange(uri, null); return num; }}

自定義SqliteOpentHelper

public class MyDataBaseHelper extends SQLiteOpenHelper { final String CREATE_TABLE_SQL = "create table dict(_id integer primary " + "key autoincrement , word , detail)"; public MyDataBaseHelper(Context context, String name, int version) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_SQL); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.e("mrpeng", "onUpgrade: " + oldVersion + "---->" + newVersion); }}

主界面

public class MainActivity extends AppCompatActivity { private MyDataBaseHelper dbHelper; private Button insert; private Button search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File dir = Environment.getExternalStorageDirectory();//Gets the Android data directory String path = dir.getPath(); Log.e("mrpeng", "path: "+path ); dbHelper = new MyDataBaseHelper(this, "myDict.db3", 1); insert = (Button) findViewById(R.id.insert); search = (Button) findViewById(R.id.search); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String word = ((EditText) findViewById(R.id.word)).getText().toString(); String detail = ((EditText) findViewById(R.id.detail)).getText().toString(); SQLiteDatabase readableDatabase = dbHelper.getReadableDatabase(); // 執(zhí)行插入語(yǔ)句 readableDatabase.execSQL("insert into dict values(null , ? , ?)" , new String[] {word, detail }); } }); search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 獲取用戶(hù)輸入 String key = ((EditText) findViewById(R.id.key)).getText() .toString(); // 執(zhí)行查詢(xún) Cursor cursor = dbHelper.getReadableDatabase().rawQuery( "select * from dict where word like ? or detail like ?", new String[] { "%" + key + "%", "%" + key + "%" }); ArrayList<Map<String, String>> list = converCursorToList(cursor); Bundle bundle = new Bundle(); bundle.putSerializable("data",list); Intent intent = new Intent(MainActivity.this, ResultActivity.class); intent.putExtras(bundle); startActivity(intent); } }); } private ArrayList<Map<String,String>> converCursorToList(Cursor cursor) { ArrayList<Map<String, String>> list= new ArrayList<>(); while (cursor.moveToNext()){ HashMap<String, String> map = new HashMap<>(); map.put("word",cursor.getString(1)); map.put("detail",cursor.getString(2)); list.add(map); } return list; }}

結(jié)果展示頁(yè)

public class ResultActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.popup); ListView listView = (ListView) findViewById(R.id.show); Intent intent = getIntent(); Bundle data = intent.getExtras(); List<Map<String,String>> list = (List<Map<String, String>>) data.getSerializable("data"); // 將List封裝成SimpleAdapter SimpleAdapter adapter = new SimpleAdapter(ResultActivity.this , list, R.layout.line, new String[] { "word", "detail" } , new int[] {R.id.word, R.id.detail }); listView.setAdapter(adapter); }}

manifests

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mrpeng.dictprovider"> <application android:allowBackup="true" android:icon="@mdictResolver應(yīng)用

數(shù)據(jù)封裝類(lèi) Word 結(jié)果展示類(lèi)ResultActivity同應(yīng)用dictprovider

主界面

public class MainActivity extends AppCompatActivity { private ContentResolver contentResolver; private Button insert; private Button search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); contentResolver = getContentResolver(); insert = (Button) findViewById(R.id.insert); search = (Button) findViewById(R.id.search); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 獲取用戶(hù)輸入 String word = ((EditText) findViewById(R.id.word)) .getText().toString(); String detail = ((EditText) findViewById(R.id.detail)) .getText().toString(); //插入生詞記錄 ContentValues values = new ContentValues(); values.put(Words.Word.WORD,word); values.put(Words.Word.DETAIL,detail); contentResolver.insert(Words.Word.DICT_CONTENT_URI,values); Toast.makeText(MainActivity.this,"添加生詞成功",Toast.LENGTH_SHORT).show(); } }); // 為search按鈕的單擊事件綁定事件監(jiān)聽(tīng)器 search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View source) { // 獲取用戶(hù)輸入 String key = ((EditText) findViewById(R.id.key)) .getText().toString(); // 執(zhí)行查詢(xún) Cursor cursor = contentResolver.query( Words.Word.DICT_CONTENT_URI, null, "word like ? or detail like ?", new String[] { "%" + key + "%", "%" + key + "%" }, null); // 創(chuàng)建一個(gè)Bundle對(duì)象 Bundle data = new Bundle(); data.putSerializable("data", converCursorToList(cursor)); // 創(chuàng)建一個(gè)Intent Intent intent = new Intent(MainActivity.this, ResultActivity.class); intent.putExtras(data); // 啟動(dòng)Activity startActivity(intent); } }); } private ArrayList<Map<String, String>> converCursorToList(Cursor cursor) { ArrayList<Map<String, String>> result = new ArrayList<>(); // 遍歷Cursor結(jié)果集 while (cursor.moveToNext()) { // 將結(jié)果集中的數(shù)據(jù)存入ArrayList中 Map<String, String> map = new HashMap<>(); // 取出查詢(xún)記錄中第2列、第3列的值 map.put(Words.Word.WORD, cursor.getString(1)); map.put(Words.Word.DETAIL, cursor.getString(2)); result.add(map); } return result; }}
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧洲成人一区| 欧美一级视频一区二区| 农村少妇久久久久久久| 精品人体无码一区二区三区| 97电影在线看视频| 天堂美国久久| 久久久久97国产| 国产三级欧美三级日产三级99| 成人av片在线观看| 欧美+亚洲+精品+三区| 91一区二区在线观看| 北条麻妃在线观看| 一区二区视频在线观看免费的| 天天干天天干天天操| 免费看91的网站| 一区二区在线视频| www.看毛片| 欧美夫妻性视频| 美女mm1313爽爽久久久蜜臀| av日韩电影| 在线成人av| 神马午夜一区二区| 亚洲无码精品一区二区三区| 91成人在线观看喷潮蘑菇| 国产区卡一卡二卡三乱码免费| 国产综合精品一区| 午夜久久一区| 小明精品国产一区二区三区| 亚洲国产一区视频| 91爱爱小视频k| 亚洲精品一区二区三区不| 日精品一区二区| 国产精品777777在线播放| 一区二区欧美在线| 亚洲欧美一区二区三区不卡| 9色porny自拍视频一区二区| 欧美激情自拍偷拍| 日韩欧美不卡| 色综合天天综合给合国产| 澳门久久精品| 日本欧美电影在线观看| 成人网ww555视频免费看| 色999日韩自偷自拍美女| 欧美激情精品久久久六区热门| 日韩成人手机在线| 国产免费看av| 秋霞午夜鲁丝一区二区| 国内精品免费**视频| 综合久久av| 在线中文字幕观看| 国产免费av一区| gogo久久日韩裸体艺术| 亚洲精品视频观看| 亚洲午夜羞羞片| 亚洲图区欧美| 欧美色中文字幕| 26uuu色噜噜精品一区二区| 亚洲精品美女久久| 欧美日韩日日摸| 久久精品a一级国产免视看成人| 三级成人在线视频| 日本免费一二三区| 国产精品久久久久91| 日本一区二区黄色| 黄网动漫久久久| 亚洲国产综合av| 久久99影院| 国产黄色片免费在线观看| 精品美女在线视频| 国产一区二区成人| 国产成人精品一区二区无码呦| 国产精品精品软件男同| 国产99久久久国产精品成人免费| 视频一区二区不卡| 国产99久久九九精品无码| 日韩精品极品视频| 日本最黄视频| 色婷婷av一区二区| 成人影院www在线观看| 精品国产乱码久久久久久蜜臀网站| 99国产精品久| 国产伦精品一区二区三区妓女下载| 日本成人性视频| 久久国产一区二区三区| 久久中文亚洲字幕| 日本欧美精品久久久| 亚洲aⅴ乱码精品成人区| 亚洲成人久久精品| 九色视频网址| 男生女生差差差的视频在线观看| 一级特级黄色片| 痴汉一区二区三区| 国产精品第一视频| av动漫在线观看| 欧美激情欧美激情在线五月| 疯狂撞击丝袜人妻| 欧美精品一区二区蜜桃| 欧美国产激情| 欧美日韩国产中文| 少妇精品一区二区三区| 国产美女视频一区二区| 日韩亚洲在线观看| 久久久中精品2020中文| 国产chinesehd精品露脸| 国产精品999在线观看| 成人精品久久av网站| 成人羞羞国产免费| 最近中文字幕免费mv2018在线| wwww在线观看免费视频| 一区二区高清视频在线观看| 丝袜国产日韩另类美女| 成人观看高清在线观看免费| 久久综合综合久久综合| 欧美电影在线观看网站| 亚洲精品成人av| 久久精品国产亚洲av香蕉| 国产精品一区二区三区乱码| 亚洲图片小说在线| 日韩精品一卡二卡三卡四卡无卡| 97人人模人人爽人人喊38tv| 久久久久久久久电影| 欧美亚洲日本一区| 蜜桃麻豆www久久国产精品| 免费三级网站| 日韩午夜av在线| 亚洲国产二区| 中日韩美女免费视频网站在线观看| 国产精品三区四区| 99精品免费网| 久久一区二区三区av| 在线视频你懂| 久久久久久久久久久久91| 亚洲精品国产无码| 一区二区三区的久久的视频| 女优一区二区三区| 亚洲免费高清| 欧美一区二区三区视频在线| 国产高清一区在线观看| 久久影院视频免费| 欧美艹逼视频| 丁香视频五月| 欧美性受xxx| 欧美一区二区三区综合| 亚洲国产精品www| 午夜电影一区二区三区| 中文在线中文资源| 激情小说一区| 97国产成人高清在线观看| 国产高潮视频在线观看| 日本三级在线电影| jizz18欧美18| 亚洲精品国产一区二区三区| 欧美成人一区二免费视频软件| 日韩中文字幕在线视频播放| 国产日韩网站| 欧美国产日韩一区二区三区| 18aaaa精品欧美大片h| 日韩精品一区二区三区视频| 一级欧洲av| 午夜理伦三级做爰电影| 一个人免费视频www在线观看| 一级毛片免费看| 国产在线视频不卡二| 猛男gaygay欧美视频| 亚洲激情中文1区| 亚洲欧美国产中文| 免费黄频在线观看| 亚洲制服丝袜av| 日韩成人综合网| 99tv成人影院| 在线香蕉视频| 九九久久九九| 福利在线小视频| 一区二区三区四区在线免费观看| 91精品蜜臀在线一区尤物| 91网在线看| 国产成人涩涩涩视频在线观看| 最新国产在线精品91尤物| 少妇与大狼拘作爱性a| 欧美视频一区二区三区| 成人免费在线播放视频| 视频在线观看成人| 国产一区二区三区精品在线| 亚洲国产欧美一区| 黄色一区二区在线观看| 久久99国产成人小视频| 日韩av综合网站| 国产精品美女主播在线观看纯欲| 亚洲国语精品自产拍在线观看| 欧美另类在线观看| 99精品老司机免费视频| 国产成+人+亚洲+欧美+综合| 男人添女人下部视频免费| 区一区二在线观看| 欧美日韩国产在线播放网站| 丰满少妇在线观看| 97久久综合区小说区图片区| 亚洲茄子视频| 日韩精品电影一区二区三区| 91精品国产高清久久久久久91| 国产精品扒开腿做爽爽爽男男| 亚洲欧美日韩一区二区三区在线观看| 国产亚洲欧美日韩俺去了| 成人日韩在线| 九九九热999| 亚洲三级在线播放| 老司机精品视频一区二区| 久久9999免费视频| 国产精品videossex撒尿| 天天操天天艹| julia中文字幕一区二区99在线| 91九色露脸| 黄色大秀av大片| 欧美高清性xxxxxxx| 午夜精品亚洲| 亚洲自拍一区在线观看| 极品少妇一区二区三区| 亚洲国产一区二区久久久777| 91午夜伦伦电影理论片| 中文字幕一区久| 风韵丰满熟妇啪啪区老熟熟女| 密臀av一区二区三区| 国产成人免费av在线| 精品国产乱码久久久久夜深人妻| 亚洲同志男男gay1069网站| 国产精品福利在线观看播放| 另类小说视频一区二区| 肉色丝袜一区二区| 成人动漫视频在线观看| www.成人精品免费网站青椒| 在线精品观看国产| 国产视频在线免费观看| 四虎精品一区二区免费| 免费国产精品视频| 韩国三级日本三级少妇99| 三级ai视频| av免费中文字幕| 91国内视频| 国产女主播视频一区二区| 亚洲国产欧美视频| 伊人久久大香线蕉综合影院首页| 日本在线天堂| 成人综合婷婷国产精品久久蜜臀| www.欧美精品| 蜜臀av一区二区| 久久精品亚洲一区| 成人av电影观看| 久久艹国产精品| 中文字幕精品一区二区三区精品| 久久久久久一二三区| 日韩av在线播放不卡| 神马久久久久久久久久久| 日韩日韩日韩日韩| 91在线丨porny丨国产| www.久久东京| 久久99精品久久久久婷婷| 亚洲一区二区毛片| 青青青国内视频在线观看软件| 婷婷国产成人久久精品激情| 亚洲一级av无码毛片精品| 中文字幕一区二区三区四| 综合久久综合久久| 国产欧美一区二区三区视频在线观看| 91麻豆精品91久久久久同性| 中文字幕在线播放一区二区| 久久久久亚洲av成人网人人软件| 热久久国产精品| 无码h肉动漫在线观看| 欧美另类69xxx| 成人一区二区三区在线观看| 国产伦精品一区二区三区免.费| www.久久久久久久久久久| 国产视频一区二区三区四区| 精品日韩欧美| 久久亚裔精品欧美| 欧美巨大另类极品videosbest| 永久免费观看精品视频| 午夜a一级毛片亚洲欧洲| 91精品国产综合久久久蜜臀图片| 亚洲最新视频在线播放| 自拍另类欧美| 日产电影一区二区三区| 四虎成人精品一区二区免费网站| 日韩免费观看在线观看| 日韩中文字幕国产精品| 久久一二三区| 免费看av在线| 你懂的视频在线免费| 国产精品视频一区二区三区四区五区| 欧美视频福利| 国产乱码久久久久久| www午夜视频| 一区二区三区日韩| 久久精品久久久精品美女| 中文字幕有码在线观看| 在线观看污视频| 亚洲影院色在线观看免费| 你微笑时很美电视剧整集高清不卡| h网站免费看| 国产videos| 婷婷综合久久一区二区三区| aaa欧美日韩| 成人日韩在线| 伊人久久大香线蕉综合网蜜芽| 最近2019年手机中文字幕| 国产精品视频免费在线观看| 国产精品欧美日韩一区| 在线观看国产一区二区| 无码人妻久久一区二区三区不卡| 99久久久无码国产精品| 色综合久久88色综合天天提莫| 岛国视频午夜一区免费在线观看| 九色视频一区| 欧美午夜电影在线观看| 一区二区中文视频| 北条麻妃一区二区三区中文字幕| 久久机热这里只有精品| 激情综合丝袜美女一区二区| 蜜桃在线视频| 一区二区三区在线观看国产| 中文欧美日韩| 97品白浆高清久久久久久| 成人午夜视频免费看| 成人毛片一区二区| 啪啪激情综合网| 日韩中文字幕精品| 中文字幕一区二区三区四区在线视频| 欧美日韩中文国产一区发布|