ContentProvider 是android 里面重要组件之一 ,关于自定义ContentProvider 代码 以提供一个学生类的数据表为例
package com.content.provider;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
// private static final String
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void query(View view){
Cursor cursor=getContentResolver().query(Student.CONTENT_URI, null, null, null,null);
String data="";
if(cursor.moveToFirst()){
data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);
}
while(cursor.moveToNext()){
data+="id"+cursor.getInt(0)+"name"+cursor.getString(1);
}
cursor.close();
setTitle("查询成功!");
((TextView)findViewById(R.id.textView1)).setText(data);
}
public void insert(View view){
ContentValues values=new ContentValues();
values.put("NAME", "123444");
getContentResolver().insert(Student.CONTENT_URI, values);
setTitle("插入成功!");
}
public void update(View view){
ContentValues values=new ContentValues();
values.put("name", "456");
String where="id=?";
String[] selectionArgs=new String []{"1"};
getContentResolver().update(Student.CONTENT_URI, values, where, selectionArgs);
setTitle("更新成功!");
}
public void delete(View view){
String where="id=?";
String[] selectionArgs=new String []{"1"};
getContentResolver().delete(Student.CONTENT_URI, where, selectionArgs);
setTitle("删除成功!");
}
}
package com.content.provider;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.net.Uri;
public class StudentContentProvider extends ContentProvider {
private SQLiteDatabase mDatabase;
private StudentDataBaseHelper mHelper;
private static final String DB_NAME = "student.db";
private static Context mContext;
private static int DB_VERSION = 1;
private static final UriMatcher M_URI_MATCHER;
private SQLiteQueryBuilder mLiteQueryBuilder = new SQLiteQueryBuilder();
static {
M_URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME,
Student.STUDENT);
M_URI_MATCHER.addURI(Student.AUTHORITY, Student.TB_NAME + "/#",
Student.STUDENT_ITEM);
}
@Override
public int delete(Uri uri, String arg1, String[] arg2) {
mDatabase=mHelper.getWritableDatabase();
int row=mDatabase.delete(Student.TB_NAME, arg1, arg2);
mContext.getContentResolver().notifyChange(uri, null);
return row;
}
@Override
public String getType(Uri uri) {
int math = M_URI_MATCHER.match(uri);
switch (math) {
case Student.STUDENT:
return Student.STUDENT_TYPE;
case Student.STUDENT_ITEM:
return Student.STUDENT_ITEM_TYPE;
}
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
mDatabase = mHelper.getWritableDatabase();
String tableName = uri.getPathSegments().get(0);
if (tableName == null)
throw new IllegalArgumentException();
if (null != values) {
long rowId = mDatabase.insert(Student.TB_NAME, null, values);
if (0 < rowId) {
Uri newUri = ContentUris.withAppendedId(uri, rowId);
mContext.getContentResolver().notifyChange(uri, null);
return newUri;
}
}
return null;
}
@Override
public boolean onCreate() {
mHelper = new StudentDataBaseHelper(getContext());
mHelper.close();
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
mDatabase = mHelper.getReadableDatabase();
String tableName = uri.getPathSegments().get(0);
if (tableName == null)
throw new IllegalArgumentException();
Cursor c = mDatabase.query(Student.TB_NAME, new String[] {}, selection,
selectionArgs, null, null, sortOrder);
c.setNotificationUri(mContext.getContentResolver(), uri);
return c;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
mDatabase = mHelper.getWritableDatabase();
String tableName = uri.getPathSegments().get(0);
if (tableName == null)
throw new IllegalArgumentException();
mLiteQueryBuilder.setTables(Student.TB_NAME);
mLiteQueryBuilder.appendWhere("_id=" + uri.getLastPathSegment());
int row=mDatabase.update(Student.TB_NAME, values, selection,
selectionArgs);
mContext.getContentResolver().notifyChange(uri, null);
return row;
}
private static class StudentDataBaseHelper extends SQLiteOpenHelper {
public StudentDataBaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}
public StudentDataBaseHelper(Context context, String name,
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 "
+ "TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS STUDENT");
onCreate(db);
}
}
@Override
protected void finalize() throws Throwable {
if(null!=mDatabase) mDatabase.close();
super.finalize();
}
}
package com.content.provider;
import android.net.Uri;
import android.provider.BaseColumns;
public class Student implements BaseColumns{
public static final String TB_NAME="Student";//表名
public static final String AUTHORITY="com.content.provider.studentcontentprovider";//数据提供者的路径
public static final Uri CONTENT_URI=Uri.parse("content://"+AUTHORITY+"/"+TB_NAME);//访问学生类的URI
public static final String STUDENT_TYPE="vnd.android.cursor.dir/vnd.aspire.student";// 学生表的数据类型
public static final String STUDENT_ITEM_TYPE="vnd.android.cursor.item/vnd.aspire.student";//学生表里的一条数据的类型
public static final int STUDENT=1;//所有数据 类型常量
public static final int STUDENT_ITEM=2;//一条数据的类型常量
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.content.provider"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="4" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider android:name=".StudentContentProvider" android:authorities="com.content.provider.studentcontentprovider"></provider>
</application>
</manifest>
分享到:
相关推荐
在Android开发中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。这篇博文的示例程序"android content provider示例程序(简单记账)"旨在帮助开发者理解...
在Android开发中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。本"Android Content Provider Demo"着重于演示如何创建和使用Content Provider来实现跨...
Android Content Provider用法样例,解析如何使用“内容提供商”Content Provider共享不同应用的数据,本Android例子将使用Content Provider实现了获取联系人信息,里面的注释非常丰富,是学习android的好资料。
android content provider两个程序共享数据实例demo。简单的两个应用app之间共享数据。 getContentResolver().insert() getContentResolver().query() getContentResolver().delete() getContentResolver().update()
Android:Content Provider的使用。 1、Content Provider 简介 2、使用现成的Content Provider 3、定义自己的Content Provider 一、Content Provider 简介 我们说Android应用程序的四个核心组件是:Activity、...
《深入解析Android Content Provider的使用》 Content Provider作为Android四大组件之一,是Android系统中实现数据共享的关键机制。本文将详细阐述Content Provider的定义、配置、功能以及如何通过Uri进行数据操作...
**Android基础 Content Provider** 在Android开发中,Content Provider是一个至关重要的组件,它充当了应用程序间数据共享的桥梁。本文将深入探讨Content Provider的基本概念、创建方法、如何进行CRUD(Create、...
Android 组件 Content Provider 使用解析 Content Provider 是 Android 四大组件之一,主要作用是实现各个应用程序之间的数据共享。它提供了一种机制,允许不同的应用程序共享数据,实现跨应用程序之间的数据交互。...
在Android系统中,Content Provider是四大组件之一,它是应用程序间数据共享的核心机制。Content Provider允许一个应用暴露其数据,使得其他应用可以读取或者写入这些数据,甚至跨应用程序进行数据交换。这篇博客...
在Android开发中,`android.provider`包是系统提供的一个核心包,主要用于与系统的各种内容提供者(Content Provider)进行交互。这些内容提供者是Android系统数据共享的关键组件,它们允许应用访问并操作如联系人、...
理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。
在Android开发中,Content Provider是四大组件之一,它充当了数据共享和交换的桥梁,使得不同的应用程序之间可以安全地共享数据。本示例将详细解析如何自定义Content Provider,以便在Android应用间实现数据共享。 ...
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享和交换的重要角色。Content Provider使得应用程序可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在这个"android provider...
在Android开发中,Content Provider是一种重要的组件,它允许应用程序之间共享数据。`content_provider_demo`是一个展示如何创建和使用Content Provider的示例项目。在这个项目中,开发者将学习如何为其他应用提供...
在Android开发中,Content Provider是四大组件之一,它扮演着数据共享和跨应用通信的关键角色。本示例项目"android-simple-content-provider-app"是专门为初学者设计的,旨在讲解如何在Android应用程序中创建和使用...
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序之间可以安全地访问和操作数据。本篇文章将深入探讨如何利用Content Provider获取联系人和图片,以及相关的知识点。 ...
在Android应用开发中,Content Provider是一种重要的组件,它允许应用程序之间进行数据共享。Content Provider作为Android系统中的数据接口,能够使一个应用的数据被其他应用访问和操作,这在多应用协同工作或者数据...
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地共享数据。本文将深入探讨如何使用Content Provider组件来访问和操作Android设备上的通讯录,特别是针对...