1、ContentProvider是什么
ContentProvider是安卓四大组件之一,是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取以及操作数据,并实现了在各个应用程序之间数据共享。
2、ContentResolver是什么
数据调用者,ContentProvider将数据发布出来之后,通过ContentResolver对象结合Uri进行调用;
调用ContentProvider的增删改查操作。
3、URI是什么,标准格式是什么
Uri通用资源标识符 ;
uri标准格式:content://com.包名(三级)/资源路径
4、UriMacher是什么
适用于匹配Uri的Uri规则工具类;
当调用这传递过来的Uri时,我们需要对Uri进行解析,确定调用者需要执行什么操作。
5、如何使用ContentProvider
使用SQLite技术,创建好数据库和数据表;新建类继承ContentProvider;创建UriMacher定义Uri规则;
重写6个抽象方法,在Manifest中注册provider;ContentResolver对ContentProvider共享的数据进行增删改查操作。
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class StudentSQLite extends SQLiteOpenHelper {
private String student_sql="create table student(" +
"id integer primary key autoincrement not null," +
"name text," +
"age integer" +
")";
public StudentSQLite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(student_sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;
public class StudentProvider extends ContentProvider {
private String TAG="StudentProvider";
private StudentSQLite studentSqlite;
private SQLiteDatabase sqlitedb;
private UriMatcher uriMatcher;
@Override
public boolean onCreate() {
Log.e(TAG, "onCreate: ---------" );
studentSqlite=new StudentSQLite(getContext(),"student_db",null,1);
sqlitedb=studentSqlite.getWritableDatabase();
return false;
}
/* {
uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("com.lenovo.studentprovider","student",1);
uriMatcher.addURI("com.lenovo.studentprovider","teacher",2);
}*/
@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
Log.e(TAG, "query: --------" );
return null;
}
@Nullable
@Override
public String getType(Uri uri) {
Log.e(TAG, "getType: ----------");
return null;
}
@Nullable
@Override
public Uri insert(Uri uri, ContentValues contentValues) {
Log.e(TAG, "insert: -------" );
sqlitedb.insert("student",null,contentValues);
return null;
}
@Override
public int delete(Uri uri, String s, String[] strings) {
Log.e(TAG, "delete: --------" );
sqlitedb.delete("student",s,strings);
return 0;
}
@Override
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
Log.e(TAG, "update: --------");
sqlitedb.update("student",contentValues,"name=?",strings);
return 0;
}
}
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class StuedntActivity extends AppCompatActivity implements View.OnClickListener {
private Button add_btn, delete_btn, update_btn, select_btn;
private ContentResolver contentResolver;
private Uri uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_stuednt);
init();
uri = Uri.parse("content://com.lenovo.studentprovider");//在uri后面写上表名
contentResolver = getContentResolver();
/*contentResolver.insert(uri, new ContentValues());
contentResolver.query(uri, null, null, null, null);*/
}
private void init() {
add_btn = (Button) findViewById(R.id.add_btn);
delete_btn = (Button) findViewById(R.id.delete_btn);
update_btn = (Button) findViewById(R.id.update_btn);
select_btn = (Button) findViewById(R.id.update_btn);
add_btn.setOnClickListener(this);
delete_btn.setOnClickListener(this);
update_btn.setOnClickListener(this);
select_btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.add_btn:
ContentValues contentValues = new ContentValues();
contentValues.put("name", "Frank");
contentValues.put("age", "88");
contentResolver.insert(uri, contentValues);
break;
case R.id.delete_btn:
contentResolver.delete(uri,"name=?",new String[]{"Remove"});
break;
case R.id.update_btn:
ContentValues Values = new ContentValues();
contentResolver.update(uri,Values,"name=?",new String[] {"Frank"});
break;
case R.id.select_btn:
Cursor cursor= contentResolver.query(uri,null,null,null,null);
do{
int id=cursor.getInt(cursor.getColumnIndex("id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
int age=cursor.getInt(cursor.getColumnIndex("age"));
}while (cursor.moveToNext());
break;
default:
break;
}
}
}