今天突然想吃披萨,然后上网一搜,哦,附近有家必胜客,就在五一广场那里,上面显示是九点关门,那我现在去就能吃到。吃披萨的时候突然灵光一现,对了,网站访问流程不正是这个过程吗,网站里的内容正是我想吃的披萨,我要想吃还得知道它的地址,当然有没有关门也是必须的,我得知道网站有没有发布内容呀
<!--配置内容提供者--> <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); } } |
新闻热点
疑难解答