1.内容提供器简介
内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能, 它提供了一套完整的机制,允许一个程序访
问另一个程序中的数据,同时还能保证被访数据 的安全性。目前,使用内容提供器是 Android 实现跨程序共享数据的标准方式。
不同于文件存储和 SharedPreferences 存储中的两种全局可读写操作模式,内容提供器可 以选择只对哪一部分数据进行共享,从而
保证我们程序中的隐私数据不会有泄漏的风险。
内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中 的数据,另一种是创建自己的内容提供器给
我们程序的数据提供外部访问接口。那么接下来 我们就一个一个开始学习吧,首先从使用现有的内容提供器开始。
2.创建一个应用用来被访问数据
1).创建一个类继承ContentProvide
public class BankBackDoor extends ContentProvider {
Open open;
@Override
public boolean onCreate() {
Log.e("main","onCreate");
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) {
Log.e("main","query");
open=new Open(getContext());
String[] name=new String[]{"潘宇田"};
Cursor cursor=open.sqLiteDatabase.rawQuery("select * from lkh where name=?",name);
// cursor.moveToFirst();
// ArrayList arrayList=new ArrayList();
// if(cursor.moveToNext()){
// arrayList.add(cursor.getString(2));
//}
return cursor;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
Log.e("main","getType");
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) {
Log.e("main","insert");
open=new Open(getContext());
open.sqLiteDatabase.execSQL("insert into lkh(id,name,age) values (2,'潘宇田','18')");
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) {
Log.e("main","delete");
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) {
Log.e("main","update");
return 0;
}
}
2).创建数据库类:
public class Open extends SQLiteOpenHelper {
SQLiteDatabase sqLiteDatabase;
public Open(Context context) {
super(context, "pyt.db", null, 1);
sqLiteDatabase=getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table lkh(id integer [not null] [primary key],name text,age text)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
3).在清单中注册Provide:
<provider android:name="com.zhy.magicviewpager.sample.BankBackDoor" android:authorities="com.po.oo" android:exported="true" >
3.创建另一个应用访问数据:
1).点击事件操作数据库:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//
ContentResolver resolver=getContentResolver();
Uri uri=Uri.parse("content://com.po.oo");
ContentValues values=new ContentValues();
Cursor cursor=resolver.query(uri,null,null,null,null);
cursor.moveToFirst();
if(cursor.moveToNext()){
String ss=cursor.getString(cursor.getColumnIndex("name"));
Log.e("main",ss);
}
}
});
4.得出结果:
12-15 17:07:59.698 14509-14509/com.example.myapplication E/main: 潘宇田