android的与ContentResolver(内容访问者)对ContentProvider(内容提供者)的增删查改

本文提供了使用 Android SQLite 和 ContentProvider 进行数据操作的详细示例,包括创建 ContentProvider 类、配置文件设置及访问者界面设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这个是底层写法

1、定义类继承ContentProvider根据需要重写内部方法 可以参考 我的代码如下:

package com.example.android_sqlite;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;

import com.zking.db.DbHherp;

/**
 * Created by Administrator on 2017/2/6.
 */

public class myContentProvider extends ContentProvider {

    private DbHherp dbHherp;
    private SQLiteDatabase db;
    @Override
    public boolean onCreate() {
        //实例化DbHherp
        dbHherp = new DbHherp(getContext(),"person.db",null,1);
        //获取SQLiteDataBase对象(类似Hibernate中Session)
        db = dbHherp.getReadableDatabase();
        return false;
    }

    @Nullable
    @Override
    //查询
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        return  db.query(false,"person",strings,s,strings1,null,null,s1,null);
    }

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

    @Nullable
    @Override
  //添加
public Uri insert(Uri uri, ContentValues contentValues) { db.insert("person",null,contentValues); return null; } @Override
    //删除
public int delete(Uri uri, String s, String[] strings) { db.delete("person",s,strings); return 0; } @Override
    //修改
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {

      db.update("person",contentValues,s,strings);
        return 0;
    }
}
 2、注意配置文件里面的配置要配置好
<!--配置内容提供者-->
<provider
    android:authorities="com.example.android_sqlite.myProvider"
    android:name=".myContentProvider"
    android:exported="true"
    ></provider>
3、现在要写内容访问者
package com.example.android_contentresolver;

import android.content.ContentProvider;
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.util.Log;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText et_main_name;
    private ContentResolver cr;
    private EditText et_main_pass;
    private EditText et_main_id;
    private EditText et_main_myname;
    private EditText et_main_mypass;
    private Uri uri;
    private EditText et_main_deletename;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_main_name = (EditText) findViewById(R.id.et_main_name);
        et_main_pass = (EditText) findViewById(R.id.et_main_pass);

        et_main_id = (EditText) findViewById(R.id.et_main_id);
        et_main_myname = (EditText) findViewById(R.id.et_main_myname);
        et_main_mypass = (EditText) findViewById(R.id.et_main_mypass);

        et_main_deletename = (EditText) findViewById(R.id.et_main_deletename);

        //获取内容访问者
        cr = getContentResolver();
    }


    public void myselect(View view){
      //协议
        uri = Uri.parse("content://com.example.android_sqlite.myProvider");
      Cursor cursor=cr.query(uri,null,null,null,null);
        while (cursor.moveToNext()){
          int pid= cursor.getInt(cursor.getColumnIndex("_id"));
          String name=cursor.getString(cursor.getColumnIndex("name"));
          int pass= cursor.getInt(cursor.getColumnIndex("pass"));
            Log.i("test",pid+""+name+""+pass);
        }
    }



    public void myinserter(View view){
        String name=et_main_name.getText().toString();
        int pass=Integer.parseInt(et_main_pass.getText().toString());
        //协议
      uri=Uri.parse("content://com.example.android_sqlite.myProvider");
        //保存到数据中
        ContentValues values=new ContentValues();
        values.put("name",name);
        values.put("pass",pass);
        values.putNull("_id");
        cr.insert(uri,values);
    }

        public void myupdate(View view){
            int myid=Integer.parseInt(et_main_id.getText().toString());
            String name=et_main_myname.getText().toString();
            int pass=Integer.parseInt(et_main_mypass.getText().toString());
            //协议
            uri=Uri.parse("content://com.example.android_sqlite.myProvider");
            //修改语句
            ContentValues values = new ContentValues();
            values.put("name", name);
            values.put("pass", pass);
            String whereClause = "_id=?";
            String[] whereArgs = new String[] { String.valueOf(myid) };
            cr.update(uri,values, whereClause, whereArgs);
        }

    public void mydelete(View view){
        String name=et_main_deletename.getText().toString();
        //协议
        uri=Uri.parse("content://com.example.android_sqlite.myProvider");

        cr.delete(uri,"name=?",new String[]{name});

    }

}
这个是xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android_contentresolver.MainActivity">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你要查询的号码"
        android:id="@+id/et_main_name"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你的密码"
        android:id="@+id/et_main_pass"
        />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="查询"
        android:onClick="myselect"
        />

    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="添加"
        android:onClick="myinserter"
        />
</LinearLayout>



    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你要修改的ID"
        android:id="@+id/et_main_id"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你要修改的账号"
        android:id="@+id/et_main_myname"
        />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你要修改的密码"
        android:id="@+id/et_main_mypass"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="修改"
        android:onClick="myupdate"
        />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入你要删除的账号"
        android:id="@+id/et_main_deletename"
        />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除"
        android:onClick="mydelete"
        />

</LinearLayout>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值