天天看点

Android 四大组件之Content provider使用

网上很多有关android contentprovider的说明很多但是不全,在这里就写了一个完整的demo,多说无益直接上代码吧!!!!!!!!!!!!!!!!!!!!!!

 1:工具类

 package com.pengxiaolong.example;

import android.net.Uri;

public class dbUtil {

public  static String Dbname="student.db";

public  static String TableName="student";

public  static int dbVisition=1;

public  static String ID="id";

public  static String NAME="name";

public  static String SEX="sex";

public  static  String sql="create table "+TableName+"("+ID+" TEXT,"+NAME+" TEXT,"+SEX+" TEXT"+")";

public  final static int STUDENT_TABLE=1;

public  final static int STUDENT__TANLE_ITEM=2;

public  static String TYPE_TABLE="heart.style";

public  static String TYPE_TABLE_ITEM="heart.style.otem";

public  static String AUTHOR="com.pengxiaolong.heartstyle";

public  static Uri URI=Uri.parse("content://"+AUTHOR+"/"+TableName);

public  static Uri URI1=Uri.parse("content://"+AUTHOR+"/"+TableName+"/"+1);

}

2:数据库创建类

package com.pengxiaolong.example;

import android.content.ContentValues;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class myDbhelper extends SQLiteOpenHelper {

public myDbhelper(Context context) {

super(context, dbUtil.Dbname, null, dbUtil.dbVisition);

// TODO Auto-generated constructor stub

}

@Override

public void onCreate(SQLiteDatabase arg0) {

// TODO Auto-generated method stub

arg0.execSQL(dbUtil.sql);

}

@Override

public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

// TODO Auto-generated method stub

arg0.execSQL("drop table  if exists " + dbUtil.TableName);

onCreate(arg0);

}

public void InsertDate() {

for (int i = 0; i < 20; i++) {

ContentValues contentValues = new ContentValues();

contentValues.put(dbUtil.ID, (i + 1) + "");

contentValues.put(dbUtil.NAME, "name" + (i + 1));

contentValues.put(dbUtil.SEX, "sex" + (i + 1));

this.getWritableDatabase().insert(dbUtil.TableName, dbUtil.ID,

contentValues);

}

}

}

3:数据共享类

package com.pengxiaolong.example;

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.text.TextUtils;

import android.util.Log;

public class myContentProvider extends ContentProvider {

public static UriMatcher uriMatcher;

public myDbhelper dbhelper;

public SQLiteDatabase db;

static {

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

uriMatcher

.addURI(dbUtil.AUTHOR, dbUtil.TableName, dbUtil.STUDENT_TABLE);

uriMatcher.addURI(dbUtil.AUTHOR, dbUtil.TableName + "/#",

dbUtil.STUDENT__TANLE_ITEM);

}

@Override

public boolean onCreate() {

// TODO Auto-generated method stub

dbhelper = new myDbhelper(getContext());

db = dbhelper.getWritableDatabase();

dbhelper.InsertDate();

return true;

}

@Override

public int delete(Uri arg0, String arg1, String[] arg2) {

// TODO Auto-generated method stub

if (uriMatcher.match(arg0) == dbUtil.STUDENT_TABLE) {

db.delete(dbUtil.TableName, arg1, arg2);

} else {

String id = arg0.getPathSegments().get(1);

db.delete(dbUtil.TableName,

dbUtil.ID+"="+id

+ (!TextUtils.isEmpty(arg1) ? " AND (" + arg1 + ')'

: ""), arg2);

}

getContext().getContentResolver().notifyChange(arg0, null);

return uriMatcher.match(arg0);

}

@Override

public String getType(Uri arg0) {

// TODO Auto-generated method stub

switch (uriMatcher.match(arg0)) {

case dbUtil.STUDENT_TABLE:

return dbUtil.TYPE_TABLE;

case dbUtil.STUDENT__TANLE_ITEM:

return dbUtil.TYPE_TABLE_ITEM;

}

return null;

}

@Override

public Uri insert(Uri arg0, ContentValues arg1) {

// TODO Auto-generated method stub

if (uriMatcher.match(arg0) == dbUtil.STUDENT_TABLE) {

long rowid = db.insert(dbUtil.TableName, dbUtil.ID, arg1);

if (rowid > 0) {

Uri noteUri = ContentUris.withAppendedId(dbUtil.URI, rowid);

getContext().getContentResolver().notifyChange(noteUri, null);

return noteUri;

}

} else {

return null;

}

return arg0;

}

@Override

public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,

String arg4) {

// TODO Auto-generated method stub

Cursor c=null; 

switch (uriMatcher.match(arg0)) {

case dbUtil.STUDENT_TABLE:

Log.e("=======================", "=============>>>>>>quary1");

c=db.query(dbUtil.TableName, arg1, arg2, arg3, null, null, arg4);

break;

case dbUtil.STUDENT__TANLE_ITEM:

Log.e("=======================", "=============>>>>>>quary2");

String id = arg0.getPathSegments().get(1);

c=db.query(dbUtil.TableName, arg1, dbUtil.ID+"="+id

+ (!TextUtils.isEmpty(arg2) ? " AND (" + arg1 + ')'

: ""), arg3, null, null, arg4);

break;

}

        c.setNotificationUri(getContext().getContentResolver(), arg0); 

return c;

}

@Override

public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {

// TODO Auto-generated method stub

int count=0;

switch (uriMatcher.match(arg0)) {

case dbUtil.STUDENT_TABLE:

db.update(dbUtil.TableName, arg1, arg2, arg3);

break;

case dbUtil.STUDENT__TANLE_ITEM:

String id = arg0.getPathSegments().get(1);

db.update(dbUtil.TableName, arg1, dbUtil.ID+"="+id+(!TextUtils.isEmpty(arg2) ? " AND (" + arg1 + ')'

: ""), arg3);

break;

}

getContext().getContentResolver().notifyChange(arg0, null);

return count;

}

 4:实体类

package com.pengxiaolong.example;

public class Student {

private int ID;

private String Name;

private String Sex;

public int getID() {

return ID;

}

public void setID(int iD) {

ID = iD;

}

public String getName() {

return Name;

}

public void setName(String name) {

Name = name;

}

public String getSex() {

return Sex;

}

public void setSex(String sex) {

Sex = sex;

}

}

5:适配器类

package com.pengxiaolong.example;

import java.util.List;

import com.example.androidcontentprovider.R;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

public class Studentadapter extends BaseAdapter {

private List<Student> data;

private LayoutInflater layoutInflater;

public Studentadapter(List<Student> data, LayoutInflater layoutInflater) {

// TODO Auto-generated constructor stub

this.data = data;

this.layoutInflater = layoutInflater;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return data.size();

}

@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return data.get(arg0);

}

@Override

public long getItemId(int arg0) {

// TODO Auto-generated method stub

return arg0;

}

@Override

public View getView(int arg0, View arg1, ViewGroup arg2) {

// TODO Auto-generated method stub

Option opt=null;

if (arg1 == null) {

opt=new Option();

arg1 = layoutInflater.inflate(R.layout.item, null);

opt.id=(TextView) arg1.findViewById(R.id.id);

opt.name=(TextView) arg1.findViewById(R.id.name);

opt.sex=(TextView) arg1.findViewById(R.id.sex);

arg1.setTag(opt);

}else{

opt=(Option) arg1.getTag();

}

opt.id.setText(data.get(arg0).getID()+"");

opt.name.setText(data.get(arg0).getName());

opt.sex.setText(data.get(arg0).getSex());

return arg1;

}

class Option {

private TextView id;

private TextView name;

private TextView sex;

}

}

6:视图类

package com.pengxiaolong.example;

import java.util.ArrayList;

import java.util.List;

import com.example.androidcontentprovider.R;

import android.app.Activity;

import android.content.ContentResolver;

import android.database.Cursor;

import android.os.Bundle;

import android.widget.ListView;

public class MainActivity  extends Activity{

private ListView listview;

private List<Student> data=new ArrayList<Student>();

;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

quaryData();

viewinit();

}

private void viewinit(){

listview=(ListView) this.findViewById(R.id.listView1);

listview.setAdapter(new Studentadapter(data, getLayoutInflater()));

}

public void quaryData(){

ContentResolver contentResolver=this.getContentResolver();

// Cursor cursor=contentResolver.query(dbUtil.URI, null, null, null, null);

Cursor cursor=contentResolver.query(dbUtil.URI1, null, null, null, null);

int count=cursor.getCount();

if(count!=0){

for (int i = 0; i <count; i++) {

cursor.moveToPosition(i);

Student student=new Student();

student.setID(Integer.parseInt(cursor.getString(0)));

student.setName(cursor.getString(1));

student.setSex(cursor.getString(2));

data.add(student);

}

}

cursor.close();

}

}

7:主配置文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.androidcontentprovider"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity android:name="com.pengxiaolong.example.MainActivity">

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

        </activity>

        <provider android:name="com.pengxiaolong.example.myContentProvider" android:authorities="@string/Author" android:exported="true">

        </provider>

    </application>

</manifest>

代码就这些 当然你也可以再新建一个工程调用一下,是没有问题的哦!

}