您的位置:首页 > 编程语言 > PHP开发

内容提供者 ContentProvider 内容访问者 ContentResolver 框架搭建

2017-02-14 19:10 639 查看
内容提供者 ContentProvider

内容访问者 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);
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐