ContentProvider

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;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值