(android)内容提供者contentprovider(-)

来源:互联网 发布:加工中心倒角c怎么编程 编辑:程序博客网 时间:2024/06/12 19:07

首先什么是内容提供者?内容提供者是Android中的四大组件之一,今天研究了下利用内容提供者查询和修改数据库的数据,虽然简单了点,但也想分享给大家!

  首先用android studio创建一model,再新建两个包,一个为provider,另外一个为DBUtil。

        在main主页面这样写

<?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:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="com.liuqian.android_24_contentprovider.MainActivity">    <EditText        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/main_edittext_id"/>    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="getData"        android:text="获取数据"        android:clickable="true"/>    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="updateData"        android:text="修改数据"        android:clickable="true"/></LinearLayout>
内含两个点击事件,它们的用处接着往下看就知道了
在自己新建的那个DBUtil包里面新建一个工具类,用来连接数据库
package DBUtil;import android.content.Context;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by Administrator on 2017/02/07. */public class BDUtil extends SQLiteOpenHelper{    /**     * 构造方法     * @param context   上下文     * @param name    数据库名字     * @param factory   null     * @param version   数据库版本     */    public BDUtil(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {        super(context, name, factory, version);    }    //创建表的操作   调用一次    @Override    public void onCreate(SQLiteDatabase db) {        //创建表、        db.execSQL("create table student (_id integer primary key autoincrement,name,sex)");        db.execSQL("insert into student (name,sex) values('傻逼1','男')");        db.execSQL("insert into student (name,sex) values('傻逼2','男')");    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

然后在自己新建的那个provider包里面新建一个类MyContentProvider,继承ContentProvider,实现方法
然后在清单文件application里做配置就好了,其中包括三个属性name,authorities,exported三个属性,authorities中写这个项目唯一的包名
name写contentProvider这个类的所在位置就好了,而exported值为true就好了
<!--配置内容提供者--><provider    android:authorities="com.liuqian.android_24_contentprovider.PERSON"    android:name="provider.MyContentProvider"    android:exported="true"></provider>
下面这个为内容提供者类的内容
package provider;import android.content.ContentProvider;import android.content.ContentUris;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;import DBUtil.BDUtil;/** * Created by Administrator on 2017/02/07. */public class MyContentProvider extends ContentProvider{    private SQLiteDatabase db;    private UriMatcher uriMatcher;    @Override    public boolean onCreate() {        Log.i("test","onCreate");        BDUtil bdUtil=new BDUtil(getContext(),"G1508201.db",null,2);        db = bdUtil.getReadableDatabase();        //实例化URI匹配器        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);        //添加规则//        uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student2",3);        //01   查询所有        uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student",1);        //02   查询单个        uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student/#",2);        //添加修改规则        uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student2",3);        return false;    }    @Nullable    @Override    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {        //根据URI匹配器开始匹配        int code=uriMatcher.match(uri);        switch (code){            case 1:                //查询所有                return db.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,null);            case 2:                //查询单个                long id= ContentUris.parseId(uri);                return db.rawQuery("select * from student where _id=?",new String [] {id+""});        }        return null;    }    @Nullable    @Override    public String getType(Uri uri) {        return null;    }    @Nullable    @Override    public Uri insert(Uri uri, ContentValues values) {        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) {        int code=uriMatcher.match(uri);        if(code==3){//            执行修改语句            db.update("student",values,"",new String [] {});            return 1;        }        return 0;    }}
//接下来的步骤也不多了,就是在main那个类里面执行相对应的操作就好了
package com.liuqian.android_24_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.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private EditText main_edittext_id;    private ContentResolver contentResolver;    private Uri uri;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        main_edittext_id = (EditText) findViewById(R.id.main_edittext_id);        //获取内容访问者        contentResolver = getContentResolver();        //insertData();    }    private void insertData() {        //自动增加数据        ContentValues contentValues=new ContentValues();        contentValues.put("name","嘻哈");        contentValues.put("sex","男");        uri = Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student2");        contentResolver.insert(uri,contentValues);    }    //修改数据    public  void updateData(View view){        uri=Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student2");        ContentValues values=new ContentValues();        values.put("_id","1");        values.put("name","aa");        values.put("sex","女");        int aa=contentResolver.update(uri,values,"",new String [] {});        if(aa==1){            Toast.makeText(this, "修改成功!", Toast.LENGTH_SHORT).show();        }    }    //getData    public void getData(View view){        //判断输入框的值是否为空        if(TextUtils.isEmpty(main_edittext_id.getText().toString())){            //为空则查询所有            //content://    为协议            uri = Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student");        }else{            //查询单个            /**             * 直接query传参    类似web传参  Uri匹配器             */            String id=main_edittext_id.getText().toString();            uri=Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student/"+id);        }        Cursor cursor=contentResolver.query(uri,null,null,null,null);        while (cursor.moveToNext()){            int id=cursor.getInt(cursor.getColumnIndex("_id"));            String name=cursor.getString(cursor.getColumnIndex("name"));            String sex=cursor.getString(cursor.getColumnIndex("sex"));            Log.i("test",id+name+sex);        }    }}
·我今天的分享到这来就结束了!本人是第一次发表博客,有异议的话请指正,谢谢!

0 0
原创粉丝点击