内容提供者 ContentProvider 内容访问者 ContentResolver 框架搭建
2017-02-14 19:10
639 查看
内容提供者 ContentProvider
内容访问者 ContentResolver
框架搭建
内容提供者是Android四大基本组件之一,是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法。
它有内容(authorities) 名字(name) 开放(是否能够被访问 exported);可以指定需要共享的数据,其他程序就可以在不知道数据来源 路径的情况下。对共享数据进行增删改查等操作。如通讯录 多媒体等。
创建内容提供者 ContentProvider,在项目中新建一个class类,继承ContentProvider,实现它的六个方法。代码如下:
还有就是UriMatcher,本质上是一个文本过滤器。用来分辨查询者查询什么。
UriMatcher uriMatcher = new UriMatcher(uriMatcher.NO_MATCH);
一个addURI()方法用来添加新的匹配项,三个参数(authority:匹配的授权者名称,path:路径,code:返回代码)。代码如下:
在另一个项目中得到内容访问者对象 ContentResolver
ContentResolver cr=getContentResolver();
再用cr进行增删改查等操作。
“`
public class MainActivity extends AppCompatActivity {
private ContentResolver cr;
private EditText main_id;
private Uri uri;
private ListView listview;
}
内容访问者 ContentResolver
框架搭建
内容提供者是Android四大基本组件之一,是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法。
它有内容(authorities) 名字(name) 开放(是否能够被访问 exported);可以指定需要共享的数据,其他程序就可以在不知道数据来源 路径的情况下。对共享数据进行增删改查等操作。如通讯录 多媒体等。
创建内容提供者 ContentProvider,在项目中新建一个class类,继承ContentProvider,实现它的六个方法。代码如下:
public class MyProvider extends ContentProvider { private SQLiteDatabase database; private UriMatcher uriMatcher; private static final int PERSONSA=1; private static final int PERSONSB=2; private Cursor cursor; @Override public boolean onCreate() { Log.i("tt","onCreate"); DbHelper dbHelper=new DbHelper(getContext(),"G150831.db",null,2); database = dbHelper.getReadableDatabase(); //URI匹配器 uriMatcher = new UriMatcher(uriMatcher.NO_MATCH); uriMatcher.addURI("com.example.yang_contentprovier.person","persons",MyProvider.PERSONSA); uriMatcher.addURI("com.example.yang_contentprovier.person","persons/#",MyProvider.PERSONSB); return false; } @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { int code=uriMatcher.match(uri); switch (code) { case MyProvider.PERSONSA: Log.i("tt","查询所有"); cursor = database.query(true,"person",strings,s,strings1,null,null,s1,null); break; case MyProvider.PERSONSB: Log.i("tt","查询单个"); //获取#的值 long id= ContentUris.parseId(uri); cursor = database.rawQuery("select * from person where _id=?",new String[]{id+""}); break; } return cursor; } @Nullable @Override public String getType(Uri uri) { Log.i("tt","getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues contentValues) { Log.i("tt","insert"); return null; } @Override public int delete(Uri uri, String s, String[] strings) { Log.i("tt","delete"); return 0; } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { Log.i("tt","update"); return 0; } } //然后在mainifests中注册内容提供者,代码如下: <provider android:authorities="com.example.yang_contentprovier.person" android:name="com.example.yang_contentprovier.provider.MyProvider" android:exported="true"> </provider> //连接数据库: //新建一个DbHelper类,代码如下: //开始链接数据库: DbHelper dbHelper=new DbHelper(this,"G150831.db",null,2); SQLiteDatabase database=database = dbHelper.getReadableDatabase();
还有就是UriMatcher,本质上是一个文本过滤器。用来分辨查询者查询什么。
UriMatcher uriMatcher = new UriMatcher(uriMatcher.NO_MATCH);
一个addURI()方法用来添加新的匹配项,三个参数(authority:匹配的授权者名称,path:路径,code:返回代码)。代码如下:
UriMatcher uriMatcher = new UriMatcher(uriMatcher.NO_MATCH); uriMatcher.addURI("com.example.yang_contentprovier.person","persons",MyProvider.PERSONSA); uriMatcher.addURI("com.example.yang_contentprovier.person","persons/#",MyProvider.PERSONSB);
在另一个项目中得到内容访问者对象 ContentResolver
ContentResolver cr=getContentResolver();
再用cr进行增删改查等操作。
“`
public class MainActivity extends AppCompatActivity {
private ContentResolver cr;
private EditText main_id;
private Uri uri;
private ListView listview;
@Override protected void onCreate(Bundle savedInstanceState) { super. 4000 onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取内容访问者 cr = getContentResolver(); main_id = (EditText) findViewById(R.id.main_id); listview = (ListView)findViewById(R.id.main_lisview); } public void getData(View view) { String id=main_id.getText().toString(); if (TextUtils.isEmpty(id)){ //查询所有 uri = Uri.parse("content://com.example.yang_contentprovier.person/persons"); }else { //查询单个 uri = Uri.parse("content://com.example.yang_contentprovier.person/persons/"+id); } Cursor cursor = cr.query(uri, null, null, null, null); 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("tt", _id + " " + name + " "); } SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item_listview, 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); }
}
相关文章推荐
- 内容提供者ContentProvider和内容解析者ContentResolver
- 给大家简述下ContentProvider(内容提供者)与ContentResolver(内容访问者)如何使用。
- Android ContentProvider(内容提供者 )+ContentResolver(内容访问者)
- android之ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- ContentProvider内容提供者与ContentResolver内容访问者(二)
- ContentProvider(内容提供者)和ContentResolve(内容访问者)
- 使用内容提供者ContentProvider与内容访问者ContentResolver实现拿到另外一个项目的数据库数据
- Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)
- 内容提供者ContentProvider和内容观察者ContentObserver的使用
- Android知识点——内容提供者和内容观察者ContentProvider ContentResolver
- 自定义内容提供者contentresolver
- Android ContentProvinder(内容提供者) ContentResolver(内容访问者)的简单应用
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- android内容提供者ContentProvider,UriMatcher和内容观察者ContentObserver常见使用
- 内容提供者(ContentProvider)和内容观察者(ContentObserver)的使用(以应用锁为例)
- ContentProvider(内容提供者)与ContentResolver(内容访问者)