Android 四大组件之Content provider使用

来源:互联网 发布:淘宝达人发布优质帖子 编辑:程序博客网 时间:2024/05/21 16:56

网上很多有关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>



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

0 0
原创粉丝点击