今天突然想吃披薩,然后上網一搜,哦,附近有家必勝客,就在五一廣場那里,上面顯示是九點關門,那我現在去就能吃到。吃披薩的時候突然靈光一現,對了,網站訪問流程不正是這個過程嗎,網站里的內容正是我想吃的披薩,我要想吃還得知道它的地址,當然有沒有關門也是必須的,我得知道網站有沒有發布內容呀
<!--配置內容提供者--> <PRovider android:authorities="com.Wwoo0.PERSON" android:name="com.Wwoo0.MyContentProvider" android:exported="true" ></provider> |
關于ContentProvider剛剛舉了一個小例子作為說明它的原理,其實也就是以上在清單文件中的三個配置名稱一個是網址,二是內容,三是是否發布
接下來如何在數據庫中創建使用它呢,在這里分享下有關查詢方法
1.定義類繼承ContentProvider,根據需要重寫內部方法
public class MyContentProvider extends ContentProvider { private SQLiteDatabase db; private UriMatcher uriMatcher; @Override public boolean onCreate() { Log.i("test","onCreate"); DbUtil dbUtil = new DbUtil(getContext(), "person.db", null, 2); db = dbUtil.getReadableDatabase(); //實例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加規則 //01.查詢所有 content://com.zking.g150820_andorid16_sqlite.PERSON/student uriMatcher.addURI("com.Wwoo0.PERSON","student",1); //02.查詢單個 content://com.Wwoo0.PERSON/student/3 uriMatcher.addURI("com.zking.Wwoo0.PERSON","student/#",2); return false; } @Nullable @Override public 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 db.query(false,"student",strings,s,strings1,null,null,s1,null); case 2: //查詢單個 //獲取# 的值 long id=ContentUris.parseId(uri); Log.i("test","query單個"); return db.rawQuery("select * from student where _id=?",new String[]{id+""}); } return null; } @Nullable @Override public String getType(Uri uri) { Log.i("test","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { Log.i("test","insert"); return null; } @Override public int delete(Uri uri, String s, String[] strings) { Log.i("test","delete"); return 0; } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { Log.i("test","update"); return 0; } |
2.有發布者自然有訪問者,根據網址進入查詢(查詢所有或單個查詢)
public class ContentResolver extends AppCompatActivity { private ContentResolver cr; private EditText et_contentresolver_id; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contentresolver); //獲取內容訪問者 cr = getContentResolver(); et_contentresolver_id = (EditText) findViewById(R.id.et_contentresolver_id); } public void getData(View view){ //判斷輸入框的值是否為空 if(TextUtils.isEmpty(et_contentresolver_id.getText().toString())){ //查詢所有 uri = Uri.parse("content://com.Wwoo0.PERSON/student"); }else{ //查詢單個 //01.直接query傳參 //02.類似web http://localhost:8080/webProject/xxx.action?id=3 //03.Uri匹配器 String id=et_contentresolver_id.getText().toString(); uri = Uri.parse("content://com.Wwoo0.PERSON/student/"+id); } Cursor cursor=cr.query(uri,null,null,null,null); //SimleCursorAdapter 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); } } |
新聞熱點
疑難解答