- 浏览: 88922 次
- 性别:
- 来自: 上海
最新评论
-
紫藤萝:
先谢谢,我Eclipse4.3.2 设置之后 get/set ...
Eclipse get/set方法自动加上字段注释 -
zj19841001:
好东西 可以的
Eclipse get/set方法自动加上字段注释 -
csxk:
希望能提供一个Eclipse4.4版本的, 自己改的不知道怎么 ...
Eclipse get/set方法自动加上字段注释 -
qushuaisheng:
感谢楼主,Kepler测试ok。
Eclipse get/set方法自动加上字段注释 -
zhanggang807:
感谢楼主,Luna试过了。非常 好用。要的就是这个效果 。曾经 ...
Eclipse get/set方法自动加上字段注释
ContentProvider数据共享
1.首先在AndroidManifest.xml文件中添加对外暴露的数据共享接口Content
<provider android:name=".UserProvider" android:authorities="com.yaku.ContentProvider.userprovider"/>
ContentProvider采用了authorities(主机名/域名)对它进行唯一标识,authorities 就是他的域名
2.Url解析
content://com.yaku.ContentProvider.userprovider/user/2
【content://】 Android定义的内容提供都的Schema
【com.yaku.ContentProvider.userprovider】 主机名或者authorities
【user】 路径
【2】 ID
示例代码:
数据结构User.java:
package com.yaku.pojo; public class User { private int id; private String name; private int age; public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [age=" + age + ", id=" + id + ", name=" + name + "]"; } }
数据库操作DBOpenHelper.java:
package com.yaku.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper { private static final String DBNAME = "yaku.db"; //数据库名称 private static final int DBVER = 1;//数据库版本 public DBOpenHelper(Context context) { super(context, DBNAME, null, DBVER); } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE user (userid integer primary key autoincrement, name varchar(20), age integer)"; db.execSQL(sql);//执行有更改的sql语句 } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { db.execSQL("DROP TABLE IF EXISTS user"); onCreate(db); } }
对外共享处理类ContentProviderUser.java:
单元测试类(在另一个应用中):package com.yaku.ContentProvider;
import com.yaku.db.DBOpenHelper;
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;
public class ContentProviderUser extends ContentProvider {
private DBOpenHelper dbOpenHelper;
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码
private static final UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
private static final int USERS = 1;
private static final int USER = 2;
static{
//如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user路径,返回匹配码为1
MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user", USERS);
//如果match()方法匹配content://com.yaku.ContentProvider.userprovider/user/123路径,返回匹配码为2
MATCHER.addURI("com.yaku.ContentProvider.userprovider", "user/#", USER);//#号为通配符
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
int count = 0;
switch (MATCHER.match(uri)) {
case USERS:
count = db.delete("user", selection, selectionArgs);
return count;
case USER:
//ContentUris类用于获取Uri路径后面的ID部分
long id = ContentUris.parseId(uri);
String where = "userid = "+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
count = db.delete("user", where, selectionArgs);
return count;
default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}
/**
* 该方法用于返回当前Url所代表数据的MIME类型。
* 如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头
* 如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头
*/
@Override
public String getType(Uri uri) {
switch (MATCHER.match(uri)) {
case USERS:
return "vnd.android.cursor.dir/user";
case USER:
return "vnd.android.cursor.item/user";
default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}
@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
switch (MATCHER.match(uri)) {
case USERS:
long rowid = db.insert("user", "name", values);
Uri insertUri = ContentUris.withAppendedId(uri, rowid);//得到代表新增记录的Uri
this.getContext().getContentResolver().notifyChange(uri, null);
return insertUri;
default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}
@Override
public boolean onCreate() {
this.dbOpenHelper = new DBOpenHelper(this.getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
switch (MATCHER.match(uri)) {
case USERS:
return db.query("user", projection, selection, selectionArgs, null, null, sortOrder);
case USER:
long id = ContentUris.parseId(uri);
String where = "userid = "+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
return db.query("user", projection, where, selectionArgs, null, null, sortOrder);
default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
int count = 0;
switch (MATCHER.match(uri)) {
case USERS:
count = db.update("person", values, selection, selectionArgs);
return count;
case USER:
long id = ContentUris.parseId(uri);
String where = "userid = "+ id;
if(selection!=null && !"".equals(selection)){
where = selection + " and " + where;
}
count = db.update("user", values, where, selectionArgs);
return count;
default:
throw new IllegalArgumentException("Unkwon Uri:"+ uri.toString());
}
}
}
package com.yaku.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.test.AndroidTestCase; import android.util.Log; /** * 对ContentProvider工程中的ContentProviderActivity进行单元测试 */ public class ContentProviderActivityTest extends AndroidTestCase { private static final String TAG = "ContentProvider"; //往内容提供者添加数据 public void testInsert() throws Throwable{ ContentResolver contentResolver = this.getContext().getContentResolver(); Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user"); ContentValues values = new ContentValues(); values.put("name", "道长"); values.put("age", 86); Uri uri = contentResolver.insert(insertUri, values); Log.i(TAG, uri.toString()); } //更新内容提供者中的数据 public void testUpdate() throws Throwable{ ContentResolver contentResolver = this.getContext().getContentResolver(); Uri updateUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1"); ContentValues values = new ContentValues(); values.put("name", "青眉道长"); contentResolver.update(updateUri, values, null, null); } //从内容提供者中删除数据 public void testDelete() throws Throwable{ ContentResolver contentResolver = this.getContext().getContentResolver(); Uri deleteUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user/1"); contentResolver.delete(deleteUri, null, null); } //获取内容提供者中的数据 public void testFind() throws Throwable{ ContentResolver contentResolver = this.getContext().getContentResolver(); Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user"); Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc"); while(cursor.moveToNext()){ int id = cursor.getInt(cursor.getColumnIndex("userid")); String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age); } } }
监听数据的变化:
package com.yaku.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
/**
* 监听数据变化
*/
public class OtherContentProviderTest extends AndroidTestCase {
private static final String TAG = "OtherContentProvider";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Uri insertUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");
ContentResolver contentResolver = this.getContentResolver();
//对指定uri进行监听,如果该uri代表的数据发生变化,就会调用PersonObserver中的onChange()
contentResolver.registerContentObserver(insertUri, true, new PersonObserver(new Handler()));
}
private final class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
ContentResolver contentResolver = getContentResolver();
Uri selectUri = Uri.parse("content://com.yaku.ContentProvider.userprovider/user");
Cursor cursor = contentResolver.query(selectUri, null, null, null, "userid desc");
while(cursor.moveToNext()){
int id = cursor.getInt(cursor.getColumnIndex("userid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.i(TAG, "id="+ id + ",name="+ name+ ",age="+ age);
}
}
}
}
发表评论
-
Android 左右滑动实现
2014-11-01 00:11 0左右滑动 import com.sunrisepower. ... -
Android 自定义进度条
2014-11-01 00:10 0继承处View类,自实现进度条功能,思路已有,自行发挥 仿 ... -
Android 自定义绘制曲线图
2014-11-01 00:07 0虽然粗糙,但大体思路已有,自行发挥 import java ... -
Android Animation 动画效果介绍
2011-12-21 00:58 1473Android Animation 动画效果介绍 ... -
Android ListView 去除底色、选中色、阴影
2011-12-02 09:51 6000去除ListView滑到顶部和底部时边缘的黑色阴影: and ... -
Android权限大全
2011-10-13 18:47 1266Android权限大全 ... -
Android多个Activity
2011-10-11 00:34 4797使用多个Activity首先在AndroidManifest. ... -
Android Http Get/Post提交请求
2011-10-09 00:15 5812首先添加访问Internet权限: <uses- ... -
Android网络操作
2011-10-08 00:21 1623Android访问网络操作。 首先在AndroidManif ... -
Android数据存储SharedPreferences的使用
2011-10-05 01:39 5020SharedPreferences配置文件为XML文件,路径: ... -
Android源码编译调试详解
2011-08-10 15:25 3742Android2.2 源码编译 1、编译环境 And ...
相关推荐
此demo利用ContentProvider实现android app间的数据共享
Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...
android-关于ContentProvider的使用例子 有详细注释
ContentProvider数据共享的基本使用方法
安卓程序间数据共享的实现,包含两个程序,共享资源的程序和读取资源的程序,共享资源的程序包含了SQLite数据库的使用。
疯狂android资料:第九章使用ContentProvider实现数据共享.doc
ContentProvider(数据提供者)是在应用程序间共享数据的一种接口机制。应用程序在不同的进程中运行,因此,数据和文件在不同应用程序之间是不能够直接访问的。
ContentProvider实现数据共享
图1 图2代码都通过文件夹分类首先是内容提供者Lab8ContentProvider(应用一)还有SQL的HELPER:SQLiteUtil对应注册清单文件<p
Android应用程序组件Content Provider的共享数据更新通知机制分析
1.适用场景1) ContentProvider为存储和读取数据提供了...虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferen
ContentProvider 与 ContentResovler 进行应用间数据共享
Content Provider为存储数据和获取数据提供了统一的接口,它可以完成在不同应用程序下的数据共享,而在上一篇文章Android开发之SQLite的使用方法讲到的SQLite只能在同一个程序中共享数据。另外android为一些常见的...
ContentProvider 实例,实现ContentProvider,从其他应用访问ContentProvider数据,实现资源共享
android开发kotlin
进程间共享数据的本质是:添加、删除、获取 & 修改(更新)数据。 以ContentProvider的核心方法也主要是以下4个作用 Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider。 ...
ContentProvider(内容提供者)主要用于跨项目访问(操作)数据。 这个项目就是自定义内容提供者,供别的项目访问。