Android 下ContentProvider的学习

使用contentProvider

1、要先继承contentProvider

2、要在配置文件中声明contentProvider

<permission android:name="aa.bb.cc.read" ></permission>

<permission android:name="aa.bb.cc.write" ></permission>

<provider

android:name=".providers.PersonContentProvider"

android:authorities="com.itheima28.sqlitedemo.providers.PersonContentProvider"

android:readPermission="aa.bb.cc.read"

android:writePermission="aa.bb.cc.write" >

</provider>

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 PersonContentProvider extends ContentProvider {

private static final String AUTHORITY = "com.itheima28.sqlitedemo.providers.PersonContentProvider";

private static final int PRESON_INSERT_CODE = 0;// 操作person表添加的操作的uri匹配码

private static final int PERSON_DELETE_CODE = 1;

private static final int PERSON_UPDATE_CODE = 2;

private static final int PERSON_QUERY_ALL_CODE = 3;

private static final int PERSON_QUERY_ITEM_CODE = 4;

private static UriMatcher uriMatcher;

private PersonSQLiteOpenHelper mOpenHelper;// person表的数据库帮助对象

static {

uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

// 添加一些uri(分机号)

// content://com.itheima28.sqlitedemo.providers.PersonContentProvider/person/insert

uriMatcher.addURI(AUTHORITY, "person/insert", PRESON_INSERT_CODE);

// content://com.itheima28.sqlitedemo.providers.PersonContentProvider/person/delete

uriMatcher.addURI(AUTHORITY, "person/delete", PERSON_DELETE_CODE);

// content://com.itheima28.sqlitedemo.providers.PersonContentProvider/person/update

uriMatcher.addURI(AUTHORITY, "person/update", PERSON_UPDATE_CODE);

// content://com.itheima28.sqlitedemo.providers.PersonContentProvider/person/queryAll

uriMatcher.addURI(AUTHORITY, "person/queryAll", PERSON_QUERY_ALL_CODE);

// content://com.itheima28.sqlitedemo.providers.PersonContentProvider/person/query/#

uriMatcher.addURI(AUTHORITY, "person/query/#", PERSON_QUERY_ITEM_CODE);

}

@Override

public boolean onCreate() {

mOpenHelper = new PersonSQLiteOpenHelper(getContext());

return true;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

SQLiteDatabase db = mOpenHelper.getReadableDatabase();

switch (uriMatcher.match(uri)) {

case PERSON_QUERY_ALL_CODE:  // 查询所有人的uri

if(db.isOpen()) {

Cursor cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);

return cursor;

// db.close(); 返回cursor结果集时, 不可以关闭数据库

}

break;

case PERSON_QUERY_ITEM_CODE:// 查询的是单条数据, uri末尾出有一个id

if(db.isOpen()) {

long id = ContentUris.parseId(uri);

Cursor cursor = db.query("person", projection, "_id = ?", new String[]{id + ""}, null, null, sortOrder);

return cursor;

}

break;

default:

throw new IllegalArgumentException("uri不匹配: " + uri);

}

return null;

}

@Override

public String getType(Uri uri) {

switch (uriMatcher.match(uri)) {

case PERSON_QUERY_ALL_CODE: // 返回多条的MIME-type

return "vnd.android.cursor.dir/person";

case PERSON_QUERY_ITEM_CODE: // 返回单条的MIME-TYPE

return "vnd.android.cursor.item/person";

default:

break;

}

return null;

}

@Override

public Uri insert(Uri uri, ContentValues values) {

switch (uriMatcher.match(uri)) {

case PRESON_INSERT_CODE:// 添加人到person表中

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

if(db.isOpen()) {

long id = db.insert("person", null, values);

db.close();

return ContentUris.withAppendedId(uri, id);

}

break;

default:

throw new IllegalArgumentException("uri不匹配: " + uri);

}

return null;

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

switch (uriMatcher.match(uri)) {

case PERSON_DELETE_CODE:// 在person表中删除数据的操作

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

if(db.isOpen()) {

int count = db.delete("person", selection, selectionArgs);

db.close();

return count;

}

break;

default:

throw new IllegalArgumentException("uri不匹配: " + uri);

}

return 0;

}

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

switch (uriMatcher.match(uri)) {

case PERSON_UPDATE_CODE: // 更新person表的操作

SQLiteDatabase db = mOpenHelper.getWritableDatabase();

if(db.isOpen()) {

int count = db.update("person", values, selection, selectionArgs);

db.close();

return count;

}

break;

default:

throw new IllegalArgumentException("uri不匹配: " + uri);

}

return 0;

}

}

时间: 2024-10-12 21:21:24

Android 下ContentProvider的学习的相关文章

Android下ListView的学习

Android下ListView的学习 文字加图片的ListView 1.添加图片文件 在res下drawable-hdpi文件里添加所需的图片资源: 例:guide1.jpg,guide2.jpg,guide3.jpg,guide4.jpg,guide5.jpg,guide6.jpg,guide7.jpg,guide8.jpg. 2.MainActivity.java文件 1 package com.example.listview; 2 3 import java.util.ArrayLis

android下创建数据库学习笔记

##在Android中创建一个数据库## ###步骤### 1.创建一个类继承SQLiteOpenHelper并在类中重写父类的构造方法.onCreate方法.onGrade方法(数据库的版本只能升级,不能降级) ###数据库增删改查方法##     public void add(View view){         SQLiteDatabase db = sql.getWritableDatabase();         //Random random = new Random();  

android下webp的学习和使用

最近需求要给app做个漂亮.大气的引导页,找UI沟通,UI激情满满,不久就发过来了,四张图片,果然很漂亮,可一看大小,吓尿  4M多,赶快再沟通,不但要漂亮.大气,还要小,越小越好,最终经过多次沟通,发过来四张图片,总共400多K,说不能再小了,再小就影响显示效果了. 产品过来说,app怎么这么大了,要小,越小越好,马上要地推了,越小地推越容易,成本也越低. 没办法只有开发这边想办法了,网上搜了下,发现图片还有webp模式,谷歌推荐,国内很多app也都采用了,下载转化工具iSparta ,把四张

android金阳光自动化测试——学习历程:电池续航上&amp;&amp;下

章节:自动化基础篇——电池续航自动化测试上&&下 网易云课堂: http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=878098&courseId=712011 http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=878099&courseId=7120

android金阳光自动化测试——学习历程:自动化预备知识上&amp;&amp;下

章节:自动化基础篇——自动化预备知识上&&下 网易云课堂: 上:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877113&courseId=712011 下:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877114&courseId=71

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

Android ContentProvider 简单学习

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样可以对外共享数据,但数据的访问方式会因数据存储的方式而不同,如:采用xml文件对外共享数据,需要进行xml解析来读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences A

Android(java)学习笔记165:Android下编写单元测试代码(Junit Test)

编写android应用的时候,往往我们需要编写一些业务逻辑实现类,但是我们可能不能明确这个业务逻辑是否可以成功实现,特别是逻辑代码体十分巨大的时候,我们不可能一行一行检查自己的代码,为了解决这样的问题就出现了: Android下编写单元测试代码-----Junit Test       测试逻辑是:在Eclipse我们待测试项目中编写测试代码,然后运行测试代码,系统会把代码布署到模拟器或者真机中,代码运行之后,会反馈测试结果给Eclipse,用户就知道业务逻辑类是否可以成功实现. 首先我们明确A

Android系统源码学习步骤

Android系统是基于Linux内核来开发的,在分析它在运行时库层的源代码时,我们会经常碰到诸如管道(pipe).套接字(socket)和虚拟文件系统(VFS)等知识. 此外,Android系统还在Linux内核中增加了一些专用的驱动程序,例如用于日志系统的Logger驱动程序.用于进程间通信的Binder驱动程序和用于辅助内存管理的匿名共享内存Ashmem驱动程序.在分析这些Android专用驱动程序的时候,也会碰到Linux内核中与进程.内存管理相关的数据结构. 因此,我们有必要掌握一些L