【Android开发小记--19】数据存储3--ContentProvider

效果图:


         


应用一、写入应用 ContentWriter


创建类继承自 ContentProvider,

并且需要在 AndroidManifest.xml 中注册:
这里需设置 android:exported="true" ,该 provider 才能被外部调用;

使用 android:authorities 来设置 provider 的地址;

        <provider
            android:authorities="com.dingding.cp"
            android:exported="true"
            android:name="MyProvider"></provider>


MyProvider.java

使用数据库来处理数据:
初始化数据库;为数据库创建一个表;插入方法;查询方法;

//为外部应用提供数据
public class MyProvider extends ContentProvider{
    public static final Uri URI = Uri.parse("content://com.dingding.cp");//AndroidManifest.xml中Provider的地址
    SQLiteDatabase database ;
    @Override
    public boolean onCreate() {
        //数据库初始化
        database = getContext().openOrCreateDatabase("mycp.db3", Context.MODE_PRIVATE,null);
        //注:(文件名,只能被当前类调用,...)
        // 为数据库创建一个数据表
        database.execSQL("create table tab( id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)");
        //注:(tab(id 自增变量,name 是text型非空的)
        return true;
    }
    //查询
    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        Cursor cursor =database.query("tab",null,null,null,null,null,null);
        return cursor;
    }
    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }
    //插入
    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {//插入的是ContentValues
        database.insert("tab","_id",values);
//        database.close();
        return null;
    }
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}


在MainActivity.java中,执行写入数据库:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                write();
            }
        });
    }
    /*写入数据库*/
    public void write() {
        ContentValues values = new ContentValues();
        values.put("name","Java");
        values.put("name","Swift");
        values.put("name","Python");
        values.put("name","C#");
        //传递到数据库中
        getContentResolver().insert(MyProvider.URI,values);
    }
}



应用二、写入应用 ContentReader


这里,需要写入应用一中 provider 相应的 Uri 地址,才能进行读取数据操作:
数据库中插入光标cursor;光标移至开始位置;依次读取数据;

public class MainActivity extends AppCompatActivity {
    Uri URI = Uri.parse("content://com.dingding.cp");//与ContentWriter中的地址要一样
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //插入
        Cursor cursor = getContentResolver().query(URI, null, null, null, null);
        cursor.moveToFirst();//将指针移至第一个
        for (int i=0;i<cursor.getCount();i++) {
            String value = cursor.getString(cursor.getColumnIndex("name"));
            Toast.makeText(getApplicationContext(),value,Toast.LENGTH_SHORT).show();
            cursor.moveToNext();//将指针移至下一个
        }
    }
}


具体代码点击




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值