国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

初識ContentProvider(之Uri匹配器)

2019-11-09 16:55:33
字體:
來源:轉載
供稿:網友
在上一篇博客中寫到了將從另一個應用程序里獲取的數據顯示在控制臺上,在這篇博客中將會講如何將數據顯示在listView上,而且對listView上的數據做修改操作,那么其他的刪除,添加,也可以照此舉一反三啦 在這之前我們補充另一個知識點,Uri匹配器,為了體現它的用途,我們會把之前獲取所有的按鈕在做一個區分,根據條件查詢,看是查詢所有還是查詢單個 這是內容提供者項目中的類,我們可以看到Uri匹配器的使用方式,先實例化一個匹配器,然后給他添加規則,其中com.ccf.android_sqlite.PERSON的.PERSON是可以隨意命名的 public class MyContentPPRovider extends ContentProvider {private SQLiteDatabase sqLiteDatabase;private UriMatcher uriMatcher;@Overridepublic boolean onCreate() { Log.i("test","onCreate"); DbUtil dbUtil=new DbUtil(getContext(),"student.db",null,1); sqLiteDatabase = dbUtil.getReadableDatabase(); //實例化Uri匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加規則 //第一種規則,查詢所有 uriMatcher.addURI("com.ccf.android_sqlite.PERSON","student",1); //第二種規則,查詢單個 uriMatcher.addURI("com.ccf.android_sqlite.PERSON","student/#",2);//#泛指參數的值 return false;}@Nullable@Overridepublic Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { //根據URI匹配器開始匹配Uri int code=uriMatcher.match(uri); switch (code) { case 1: //查詢所有 Log.i("test","query所有"); //獲取數據庫中所有的數據 return sqLiteDatabase.query(false,"student",strings,s,strings1,null,null,s1,null); case 2: //查詢單個 //獲取# 的值 long id=ContentUris.parseId(uri); Log.i("test","query單個"); return sqLiteDatabase.rawQuery("select * from student where _id=?",new String[]{id+""}); } return null;}@Nullable@Overridepublic String getType(Uri uri) { Log.i("test","getType"); return null;}@Nullable@Overridepublic Uri insert(Uri uri, ContentValues values) { Log.i("test","insert"); return null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) { Log.i("test","delete"); return 0;}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { sqLiteDatabase.update("student",values,selection,selectionArgs); Log.i("test","update"); return 0;}}然后在內容訪問者的MainActivity的查詢方法,改成如下public void getAllData(View view){//在這里調用的方法,內容提供者也會調用 //判斷輸入框的值是否為空 if(TextUtils.isEmpty(et_main_id.getText().toString())){ //查詢所有 //必須符合content協議 Toast.makeText(this, "dds", Toast.LENGTH_SHORT).show(); uri = Uri.parse("content://com.ccf.android_sqlite.PERSON/student"); }else{ //查詢單個 //Uri匹配器 Toast.makeText(this, "111", Toast.LENGTH_SHORT).show(); String id=et_main_id.getText().toString(); uri = Uri.parse("content://com.ccf.android_sqlite.PERSON/student/"+id); } cursor=cr.query(uri,null,null,null,null); simpleCursorAdapter.changeCursor(cursor); while(cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("test",id+"=="+name+"=="+age); }} 這樣匹配器的知識點就將完了 然后就是把數據顯示在listView上,我們先要在布局文件中把listView的id改成系統的,這樣方便調用 然后在把Activity的繼承改成繼承ListActivity,就可以通過getListView()直接得到了,然后實例化適配器//實例化適配器 simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.item_list,cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age}); listView.setAdapter(simpleCursorAdapter); 然后給item設置長按事件 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long l) { LinearLayout root= (LinearLayout) view; String id=((TextView)root.findViewById(R.id.tv_item_list_id)).getText().toString(); String name=((TextView)root.findViewById(R.id.tv_item_list_name)).getText().toString(); String age=((TextView)root.findViewById(R.id.tv_item_list_age)).getText().toString(); final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); final AlertDialog alertDialog=builder.create(); //點擊空白處,不取消對話框 alertDialog.setCancelable(false);// View v= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_list,null); View v = View.inflate(MainActivity.this, R.layout.dialog_list, null); final TextView tv_dialog_list_id = (TextView) v.findViewById(R.id.tv_dialog_list_id); final EditText et_dialog_list_name = (EditText) v.findViewById(R.id.et_dialog_list_name); final EditText et_dialog_list_age = (EditText) v.findViewById(R.id.et_dialog_list_age); ((Button)v.findViewById(R.id.btn_dialog_list_ok)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String id=(String)tv_dialog_list_id.getText().toString().substring(3); String name=(String)et_dialog_list_name.getText().toString(); String age=(String)et_dialog_list_age.getText().toString(); ContentValues values=new ContentValues(); values.put("name",name); values.put("age",age); uri = Uri.parse("content://com.ccf.android_sqlite.PERSON/student"); cr.update(uri,values,"_id=?",new String[]{id}); //Toast.makeText(MainActivity.this, "執行修改語句", Toast.LENGTH_SHORT).show(); //關閉當前對話框 alertDialog.dismiss(); } }); ((Button)v.findViewById(R.id.btn_dialog_list_nook)).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //關閉當前對話框 alertDialog.dismiss(); } }); tv_dialog_list_id.setText("修改:"+id); et_dialog_list_name.setText(name); et_dialog_list_age.setText(age); alertDialog.setView(v); alertDialog.show(); return true; } });

基本上所有的關鍵代碼都在這里了,希望能幫助到需要的人,如果有什么好的意見也可以提出來,共同進步!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久治县| 三台县| 镇原县| 高要市| 垣曲县| 河南省| 辉县市| 治多县| 清流县| 广河县| 土默特右旗| 清远市| 莎车县| 新巴尔虎左旗| 明星| 英吉沙县| 石屏县| 遂溪县| 孟连| 响水县| 德令哈市| 金山区| 卢氏县| 灵台县| 正定县| 锡林浩特市| 邢台县| 宣化县| 新津县| 太仓市| 河北区| 砚山县| 简阳市| 二连浩特市| 桓台县| 黑山县| 景洪市| 深圳市| 新密市| 苏尼特左旗| 修武县|