- ContentProvider是什么
- ContentResolver是什么
- URI是什么,标准格式是什么
- UriMatcher是什么
- 如何使用ContentProvider
ContentProvider是什么
- ContentProvider是Android四大组件之一
- ContentProvider是一种数据包装器,它提供统一的接口对数据进行操作,调用者不用关心数据到底是如何存储的
- ContentProvider主要用于不同应用程序间,不同进程间的数据共享
ContentResolver是什么
- ContentResolver是数据调用者,ContentProvider将数据发布出来后,通过ContentResolve对象结合URI进行调用
- 通过ContentResolver可以调用ContentProvider的增、删、改、查操作
URI是什么,标准格式是什么
- 通用资源标识符(Universal Resource Identifier)简称Uri
URI代表要操作数据的地址,每个ContentProvider发布数据时都有一个唯一的地址
标准格式:content://com.android.contacts/contactsUriMatcher是什么
用于匹配URI的URI规则工具类
当调用者传递过来URI时,我们需要对URI进行解析,确定调用者需要执行哪个操作
如何使用ContentProvider
package com.example.a17708.pratice;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SQLiteHelper extends SQLiteOpenHelper{
private String sql="create table student("+
"id integer primary key autoincrement not null,"+
"name text,"+
"age integer"+
")";
public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
package com.example.17708.myapplication;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class ProviderActivity extends AppCompatActivity implements View.OnClickListener{
private Uri uri;
private ContentResolver contentResolver;
private EditText stuage_et, stuname_et;
private ListView stu_lv;
private SQLiteAdapter adapter;
private Button add_button, search_button, update_button, delete_button;
private List<SQLiteStu> sqLiteStuList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_provider);
stuAge_et = findViewById(R.id.stuAge_et);
stuName_et = findViewById(R.id.stuName_et);
add_button = findViewById(R.id.add_button);
add_button.setOnClickListener(this);
search_button = findViewById(R.id.search_button);
search_button.setOnClickListener(this);
update_button = findViewById(R.id.update_button);
update_button.setOnClickListener(this);
delete_button = findViewById(R.id.delete_button);
delete_button.setOnClickListener(this);
stu_lv=findViewById(R.id.stu_lv);
uri=Uri.parse("content://com.example.practiceapplication.sqlite.StudentProvider");
contentResolver=getContentResolver();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.search_button:
sqLiteStuList.clear();
Cursor cursor=contentResolver.query(uri,new String[]{"id","name","age"},null,null,null);
cursor.moveToFirst();
do {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String age = cursor.getString(cursor.getColumnIndex("age"));
SQLiteStu sqLiteStu = new SQLiteStu(id, name, age);
sqLiteStuList.add(sqLiteStu);
adapter = new SQLiteAdapter(this, sqLiteStuList);
stu_lv.setAdapter(adapter);
} while (cursor.moveToNext());
break;
case R.id.add_button:
String age1= stuAge_et.getText().toString();
String name1=stuName_et.getText().toString();
ContentValues values=new ContentValues();
values.put("name",name1);
values.put("age",age1);
contentResolver.insert(uri,values);
break;
case R.id.delete_button:
String name2=stuName_et.getText().toString();
String age2= stuAge_et.getText().toString();
contentResolver.delete(uri,"name=? and age=?",new String[]{name2,age2});
break;
case R.id.update_button:
String age3= stuAge_et.getText().toString();
String name3=stuName_et.getText().toString();
ContentValues contentValues=new ContentValues();
contentValues.put("name","ycc");
contentValues.put("age","20");
contentResolver.update(uri,contentValues,"name=? and age=?",new String[]{name3,age3});
break;
default:
break;
}
}
}