安卓四大组件之Contentprovider

一、设计目标

        使用contentprovider的方法类进行数据获取。自建一个provider,然后在另一个app中使用resolver调用这个provider。

二、功能说明

        首先,定义一个继承自contentProvider的MyContentProvider类,并实现其中的六个方法它们分别为:OnCreate()、getType()、insert()、updata()、delete()、query()。

        创建一个MyResolver类去访问ContentProvider中的数据, 即通过MyResolver类去操作不同的ContentProvider中的数据。在MyResolver类的onCreate()方法中,我们可以通过Context中的getContentResolver方法去获得一个系统的ContentResolver的实例。provider可以用于把要用的表用uri表示出来。

        MyContent是对数据库的操作方法不想暴露出去,通过uri来进行对数据库的操作,uri隐藏了数据库的名字,在DAO中封装能够对数据库的created 。用MyDBhelper做数据库的创建和连接。

三、代码解析

MyResolver.java:

package com.example.myresolver_1116;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button button1;

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

        ContentResolver resolver=getContentResolver();
        //获得到了一个系统的ContentResolver

        Uri uri= Uri.parse("content://hxy.provider2/student");
        //provider用于把要用的表用uri表示出来
        ContentValues values=new ContentValues();
        values.put("name","hxy");
        values.put("age",20);



        button1.findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resolver.insert(uri,values);
            }
        });
    }
}

MyContentProvider.java:

package com.example.provider_1116;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;

public class MyContentProvider extends ContentProvider {
    public MyContentProvider() {
    }

    
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // Implement this to handle requests to delete one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO: Implement this to handle requests to insert a new row.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        // TODO: Implement this to handle requests to update one or more rows.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

MyDAO.java

package com.example.provider_1116;

import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;

    private Context context;//创建一个context去收到传过来的context的值
    private SQLiteDatabase database;

    public MyDAO(Context context){
        this.context=context;
        MyDBhelper dbhelper=new MyDBhelper(context,"hxyDB",null,1);
        SQLiteDatabase database=dbhelper.getWritableDatabase();

    }


    public Uri hxyInsert(ContentValues values){

        Uri uri=Uri.parse("content://hxy.provider2/student");
        long rowId=database.insert("student",null,values);
        //把行地址用当前uri形式表示出来
        Uri inserturi = ContentUris.withAppendedId(uri,rowId);
        // ContentUri做content中uri的管理
        context.getContentResolver().notifyChange(inserturi,null);

        return inserturi;
    }
}

MyDBhelper.java:

package com.example.provider_1116;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

//MyDBhelper灰色表示MyDBhelper这个类没有被用过,所以可以去Activity(MyDBhelper)里面调用
public class MyDBhelper extends SQLiteOpenHelper {
    public MyDBhelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context,"hxyDB", null, version);
        //name数据库名,factory游标null;

    }

    @Override
    //必须要一个数据库对象sqLiteDatabase,才能去调用数据库
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //最简单的执行sql的语句,()里面写sql语句
        sqLiteDatabase.execSQL("create table student(id integer primary key autoincrement,name varchar(20),age integer)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

四、运行展示截图


 五、仓库地址

黄橘子/orange - 码云 - 开源中国 (gitee.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值