Mars Chen Android培训材料ContentProvider源代码
来源:互联网 发布:java软件接口 编辑:程序博客网 时间:2024/05/01 12:21
个人总结:
(1)视频中 AUTHORITY有问题,正确的应该为:
public static final String AUTHORITY ="com.example.testcontentprovider.FirstContentProvider";
1. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testcontentprovider"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testcontentprovider.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="com.example.testcontentprovider.FirstContentProvider"
android:authorities="com.example.testcontentprovider.FirstContentProvider"></provider>
</application>
</manifest>
2. activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Main activity of Content Provider" />
<Button
android:id="@+id/insert"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Insert"
/>
<Button
android:id="@+id/query"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Query"
/>
</LinearLayout>
3. DatabaseHelper.java
package com.example.sqlite3;
import com.example.testcontentprovider.FirstProviderMetaData;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1;
public DatabaseHelper(Context context, String name){
this(context, name, VERSION);
}
public DatabaseHelper(Context context, String name, int version){
this(context, name, null, version);
}
public DatabaseHelper(Context context, String name, CursorFactory factory, int version){
super(context, name, factory, version);
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
System.out.println("create a Database");
String strSql = "create table " + FirstProviderMetaData.USERS_TABLE_NAME
+"("+FirstProviderMetaData.UserTableMetaData._ID
+" INTEGER PRIMARY KEY AUTOINCREMENT,"
+ FirstProviderMetaData.UserTableMetaData.USER_NAME
+ " varchar(20))";
System.out.println(strSql);
arg0.execSQL(strSql);
}
/* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
System.out.println("update a Database");
}
}
4. FirstContentProvider.java
package com.example.testcontentprovider;
import java.util.HashMap;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import com.example.sqlite3.DatabaseHelper;
import com.example.testcontentprovider.FirstProviderMetaData.UserTableMetaData;
public class FirstContentProvider extends ContentProvider {
public static final UriMatcher uriMatcher;
public static final int INCOMING_USER_COLLECTION = 1;
public static final int INCOMING_USER_SINGLE = 2;
private DatabaseHelper dh;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(FirstProviderMetaData.AUTHORITY, "users", INCOMING_USER_COLLECTION);
uriMatcher.addURI(FirstProviderMetaData.AUTHORITY, "users/#", INCOMING_USER_SINGLE);
}
public static HashMap<String, String> userProjectionMap;
static {
userProjectionMap = new HashMap<String, String>();
userProjectionMap.put(UserTableMetaData._ID, UserTableMetaData._ID);
userProjectionMap.put(UserTableMetaData.USER_NAME, UserTableMetaData.USER_NAME);
}
/* (non-Javadoc)
* @see android.content.ContentProvider#delete(android.net.Uri, java.lang.String, java.lang.String[])
*/
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
System.out.println("delete");
return 0;
}
/* (non-Javadoc)
* @see android.content.ContentProvider#getType(android.net.Uri)
*/
@Override
public String getType(Uri arg0) {
// TODO Auto-generated method stub
System.out.println("getType");
switch (uriMatcher.match(arg0)) {
case INCOMING_USER_COLLECTION:
return UserTableMetaData.CONTENT_TYPE;
case INCOMING_USER_SINGLE:
return UserTableMetaData.CONTENT_TYPE_ITEM;
default:
throw new IllegalArgumentException("Unkown URI" + arg0);
}
}
/* (non-Javadoc)
* @see android.content.ContentProvider#insert(android.net.Uri, android.content.ContentValues)
*/
@Override
public Uri insert(Uri arg0, ContentValues arg1) {
// TODO Auto-generated method stub
System.out.println("insert");
SQLiteDatabase db = dh.getWritableDatabase();
long rowId = db.insert(UserTableMetaData.TABLE_NAME, null, arg1);
if (rowId > 0) {
Uri insertedUserUri = ContentUris.withAppendedId(UserTableMetaData.CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(insertedUserUri, null);
return insertedUserUri;
}
throw new SQLException("Failed to insert row into" + arg0);
}
/* (non-Javadoc)
* @see android.content.ContentProvider#onCreate()
*/
@Override
public boolean onCreate() {
// TODO Auto-generated method stub
dh = new DatabaseHelper(getContext(), FirstProviderMetaData.DATABASE_NAME);
System.out.println("onCreate");
return false;
}
/* (non-Javadoc)
* @see android.content.ContentProvider#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)
*/
@Override
public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
String arg4) {
// TODO Auto-generated method stub
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
switch (uriMatcher.match(arg0)) {
case INCOMING_USER_COLLECTION:
qb.setTables(UserTableMetaData.TABLE_NAME);
qb.setProjectionMap(userProjectionMap);
break;
case INCOMING_USER_SINGLE:
qb.setTables(UserTableMetaData.TABLE_NAME);
qb.setProjectionMap(userProjectionMap);
qb.appendWhere(UserTableMetaData._ID + "=" + arg0.getPathSegments().get(1));
break;
}
String orderBy;
if (TextUtils.isEmpty(arg4)) {
orderBy = UserTableMetaData.DEFAULT_SORT_ORDER;
}
else {
orderBy = arg4;
}
SQLiteDatabase db = dh.getWritableDatabase();
Cursor c = qb.query(db, arg1, arg2, arg3, null, null, orderBy);
c.setNotificationUri(getContext().getContentResolver(), arg0);
System.out.println("query");
return c;
}
/* (non-Javadoc)
* @see android.content.ContentProvider#update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[])
*/
@Override
public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
// TODO Auto-generated method stub
System.out.println("update");
return 0;
}
}
5.FirstProviderMetaData.java
package com.example.testcontentprovider;
import android.net.Uri;
import android.provider.BaseColumns;
public class FirstProviderMetaData {
//final equals to static in C++
//相当于网站的域名,数据入口
public static final String AUTHORITY ="com.example.testcontentprovider.FirstContentProvider";
//数据库名称
public static final String DATABASE_NAME = "FirstProvider.db";
//数据库版本
public static final int DATABASE_VERSION = 1;
//表名
public static final String USERS_TABLE_NAME = "users";
//定义子表, content都统一成表组织的形式。他们之间可以相互嵌套
public static final class UserTableMetaData implements BaseColumns{
//表名
public static final String TABLE_NAME = "users";
//定义数据uri,该uri对应数据库中的users表
public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY+"/users");
//访问所有数据
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.firstprovider.user";
//访问single数据项
public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.firstprovider.user";
//列名
public static final String USER_NAME = "name";
//默认排序方法
public static final String DEFAULT_SORT_ORDER = "_id desc";
}
}
6.MainActivity.java
package com.example.testcontentprovider;
//将SQLite封装成ContentProvider函数
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.testcontentprovider.FirstProviderMetaData.UserTableMetaData;
public class MainActivity extends Activity {
private Button insert = null;
private Button query = null;
private String strResult = "";
private TextView result = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
insert = (Button)findViewById(R.id.insert);
query = (Button)findViewById(R.id.query);
result = (TextView)findViewById(R.id.result);
//System.out.println("before contentresolver");
//System.out.println(getContentResolver().getType(FirstProviderMetaData.UserTableMetaData.CONTENT_URI));
//getContentResolver();
//System.out.println("after contentresolver");
//System.out.println(getContentResolver().getType(FirstProviderMetaData.UserTableMetaData.CONTENT_URI));
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ContentValues values = new ContentValues();
values.put(FirstProviderMetaData.UserTableMetaData.USER_NAME, "zhanshan");
//使用ContentResolver调用ContentProvider的insert函数
//前提是ContentProvider必须在AndroidManifest中注册
Uri uri = getContentResolver().insert(FirstProviderMetaData.UserTableMetaData.CONTENT_URI, values);
System.out.println("uri--->" + uri.toString());
}
});
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
strResult = "";
Cursor c = getContentResolver().query
(FirstProviderMetaData.UserTableMetaData.CONTENT_URI, null,
null, null, null);
while (c.moveToNext()) {
System.out.println(c.getString(c.getColumnIndex(UserTableMetaData.USER_NAME)));
strResult += c.getString(c.getColumnIndex(UserTableMetaData.USER_NAME));
}
result.setText(strResult);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
0 0
- Mars Chen Android培训材料ContentProvider源代码
- Mars Chen培训之真机调试android程序
- Mars Chen培训之socket实现
- Mars Chen培训之Wifi管理代码实现
- Mars Chen Android开发教学视频中XML代码实现的总结
- Mars Chen Service代码实现总结
- shell培训使用材料
- PSCADA培训材料
- * 1MARS算法源代码
- ArcGIS入门培训材料--视频
- 全栈工程师培训材料
- 应用部门的培训材料
- 全栈工程师培训材料
- Android材料
- Mars Chen的Broadcast Message Reciver实例总结
- Mars Chen动态注册Broadcast广播监听器的实现
- 安卓Android开发视频培训材料介绍 Video2Brain Android 2
- Windows Azure中文培训材料下载
- Javascript获取select下拉框选中的的值
- 九度oj 题目1475:IP数据包解析
- Visual Assist+VS2012破解
- 3.4 从无头链表中删除给定的结点 & 遍历一次逆转链表
- 字符串取整数前补0
- Mars Chen Android培训材料ContentProvider源代码
- 启动Activiti流程实例以及办理任务(四)
- Quartz2D绘制view
- Ubuntu 配置 OpenGrok 环境
- SPOJ HIGH 104 Highways 图的生成树计数 (Matrix-Tree定理)
- 亚马逊AWS学习——EC2实例无法正确加载EBS卷问题的解决
- Java基础——Java对象的序列化和反序列化
- ASP.NET三大核心对象及基础功能解析
- 《深入理解计算机系统》读书笔记1---计算机系统漫游