ContentProvider-初识

ContentProvider是什么?

ContentProvider(内容提供者)在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。

特点:

ContentProvider是Android中的四大组件之一,可以将应用中的数据对外进行共享;
ContentProvider将数据的访问方式统一,不必针对不同数据类型采取不同的访问策略;
ContentProvider将数据封装,只暴露出我们希望提供给其他程序的数据;
ContentProvider中数据更改可被监听。

二、ContentResolver是什么?

ContentResolver(内容解析者)用来处理ContentProvider提供的内容,外界的程序通过ContentResolver可以访问ContentProvider提供的数据;

三、URI是什么,标准格式是什么?

URI:类似于URL,但是URI的目的是为了能够根据URI以及调用的方法来决定怎样操作数据,比如:uri=”…./person”,调用insert方法,则表示需要插入一perso记录;
标准格式
(1)以 content:// 开头;
(2)模式为:content://authorities/path;其中authorities类似于域名或IP,用来标识操作哪个ContentProvider,path表示具体的操作;
demo:
content://org.xiazdong.providers.personprovider/person 表示调用“org.xiazdong.providers.personprovider”的方法,操作person数据;

四、UriMatcher是什么?

当要使用多个URI时,可以使用其筛选出不同的URI
一般直接写成静态代码块,随着类得加载自动加载,不用调用

 private UriMatcher uriMatcher;
    {
         uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
         //通过对象的addURI方法定义单条和批量的uri的规则
         uriMatcher.addURI("com.android.usersprovider","sel1",1);
         uriMatcher.addURI("com.android.usersprovider","sel2",2);
    }
//这里我拿了其中的insert方法做例子
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        Log.e(TAG,"insert..........");

        int result=uriMatcher.match(uri);
        switch (result){
            case 1:
                sqLiteDatabase.insert("Users",null ,values);
                break;
            case 2:
                break;
                default:
                    break;
        }


        return null;
    }

五、如何使用ContentProvide(demo)

简介:通过ContentProvider处理数据库的增删改查,跨程序的操作
这里写图片描述
创建一个类继承ContentProvider,并实现里面的六个方法

package com.example.fpl.week3application;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Paint;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;

public class UserscontantProvide extends ContentProvider {
    private String TAG="UserscontantProvide";

    private UserSQLiteHelper userSQLiteHelper;
    private SQLiteDatabase sqLiteDatabase;
    private UriMatcher uriMatcher;



    {
         uriMatcher=new UriMatcher(UriMatcher.NO_MATCH);
         uriMatcher.addURI("com.android.usersprovider","sel1",1);
         uriMatcher.addURI("com.android.usersprovider","sel2",2);
    }
    @Override
    public boolean onCreate() {
        userSQLiteHelper=new UserSQLiteHelper(getContext(),"USER_DB",null,1);
        sqLiteDatabase=userSQLiteHelper.getWritableDatabase();

        return false;
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        Cursor cursor= sqLiteDatabase.query("Users",null,null,null,null,null,null);

        return cursor;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        Log.e(TAG,"insert..........");
        int result=uriMatcher.match(uri);
        switch (result){
            case 1:
                sqLiteDatabase.insert("Users",null ,values);
                break;
            case 2:
                break;
        }






        return null;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        sqLiteDatabase.delete("Users",selection,selectionArgs);
        return 0;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {

        sqLiteDatabase.update("Users",values,selection,selectionArgs);

        return 0;
    }
}

2.注册ContentProvider组件(在ManiFest文件里);

 <provider
            android:authorities="com.android.usersprovider"
            android:name=".UserscontantProvide"
            android:exported="true"></provider>

3.在另一个程序里使用ContentResolver处理

package com.example.fpl.contentproviderapplication;

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 MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button buttonadd;
    private Button buttondel;
    private Button buttonfix;
    private Button buttonsea;
    private EditText name;
    private  EditText age;

    private ListView listView;

    private THER2Adapter therAdapter;
    private List<User2Bean> beanList=new ArrayList<>();




    private Uri uri;
    private Uri uri2;
    private ContentResolver contentResolver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        uri=Uri.parse("content://com.android.usersprovider/sel1");

        uri2=Uri.parse("content://com.android.usersprovider/sel2");
        contentResolver=getContentResolver();
        bindID();


    }
    private void bindID() {

        name=findViewById(R.id.username_ET);
        age=findViewById(R.id.age_ET);

        buttonadd=findViewById(R.id.ADD_BTN);
        buttondel=findViewById(R.id.DEL_BTN);
        buttonfix=findViewById(R.id.FIX_BTN);
        buttonsea=findViewById(R.id.SEA_BTN);

        listView=findViewById(R.id.THER_LV);


        buttonadd.setOnClickListener(this);
        buttondel.setOnClickListener(this);
        buttonfix.setOnClickListener(this);
        buttonsea.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.ADD_BTN:

                usersADD();
                break;
            case R.id.DEL_BTN:
                usersDEL();

                break;
            case R.id.FIX_BTN:
                usersFIX();

                break;
            case  R.id.SEA_BTN:
                usersSEA();
                break;
        }

    }



    private void usersADD() {
        String username=name.getText().toString();
        int userage= Integer.parseInt(age.getText().toString());


        ContentValues values=new ContentValues();
        values.put("usersname",username);
        values.put("usersage",userage);
        contentResolver.insert(uri,values);

    }

    private void usersDEL() {
        String username=name.getText().toString();
        String userage=age.getText().toString();
        contentResolver.delete(uri,"usersname=?and usersage=?",new String[]{username,userage});
    }


    private void usersFIX() {

        String username=name.getText().toString();
        String userage=age.getText().toString();
        ContentValues values=new ContentValues();
        values.put("usersname",username);
        values.put("usersage",userage);
        contentResolver.update(uri,values,"usersname=?and usersage=?",new String[]{username,userage});

    }



    private void usersSEA() {
        beanList.clear();
        Cursor cursor=contentResolver.query(uri,null,null,null,null);
        cursor.moveToFirst();
        do {
            int id=cursor.getInt(0);
            String name=cursor.getString(1);
            int age=cursor.getInt(2);
            User2Bean student_bean=new User2Bean(name,age);
            beanList.add(student_bean);
            therAdapter=new THER2Adapter(this,beanList );
        }while (cursor.moveToNext());
        listView.setAdapter(therAdapter);


    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值