`
javacode23
  • 浏览: 29281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习ContentResolver

阅读更多
当外部应用要对ContentProvider中的数据进行操作的时候,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用activity的getContentResolver方法。

contentResolver类提供了与contentProvider相同签名的四个方法
public Uri insert(URI uri,ContentValues values); 这个方法用于添加数据
public int delete(Uri  uri,String selection,String[] selectionArgs) 这个方法用于删除数据
public int update(Uri uri,ContentValues values,String selection,Stringp[] selectionArgs) 更新方法


下面用查询方法详细举例

public class PersonProvider extends ContentProvider {
    private static final String TAG = "PersonContentProvider";
    DBOpenHelper dbHelper;
  
    private static final int PERSONLIST = 1;
  
    private static final int PERSON = 2;
    private static UriMatcher matcher;
    static{
       matcher = new UriMatcher(UriMatcher.NO_MATCH);
       matcher.addURI("cn.itcast.provider.PersonProvider", "person", PERSONLIST);
       matcher.addURI("cn.itcast.provider.PersonProvider", "person/#", PERSON);
    }


    @Override
    public String getType(Uri uri) {
       switch (matcher.match(uri)) {
           case PERSONLIST://获取所有记录  就是这样规定的 多条记录返回这个
              return "vnd.android.cursor.dir/personprovider.person";
           case PERSON://获取单条记录  单条记录返回那个
              return "vnd.android.cursor.item/personprovider.person";
           default:
              throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
       }
    }



    @Override
    public boolean onCreate() {
       dbHelper = new DBOpenHelper(this.getContext());
       return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
       //获取数据库操作的类
       SQLiteDatabase db = dbHelper.getReadableDatabase();
       //声明一个游标
       Cursor cursor = null;
       switch (matcher.match(uri)) {
           case PERSONLIST://获取所有记录
              //cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);
              cursor = db.rawQuery("select * from person ", null);
              break;
           case PERSON://获取单条记录
              long personid = ContentUris.parseId(uri);
              String where = selection!=null && !"".equals(selection.trim()) ? selection+ " and personid="+ personid : "personid="+ personid;
              cursor = db.query("person", projection, where, selectionArgs, null, null, sortOrder);
              break;
           default:
              //如果什么都没有找到,就抛出一个异常。
              throw new IllegalArgumentException("Uri IllegalArgument:"+ uri);
       }
       //这里还有一个悬而未决的问题,就是如果这里关闭了数据库的话,外面想查找这些数据时没法完成的,所以数据库打开后就一直没有关闭,个人认为也没什么影响,手机毕竟是单机操作,而且数据库性能很好,多开个东西没关系的。
       //db.close();
       return cursor;
    }
分享到:
评论

相关推荐

    android ContentResolver的使用(获取和修改联系人信息demo)

    1、建议新手读者在学完SqLite之后再来学习ContentResolver的内容,ContentResolver的insert(),delete(),updata(),query四个操作数据库的方法均与SQLite中的相同。 2、ContentProvider的Uri,以及该ContentProvider所...

    内容提供者实践

    3. 学习ContentResolver的使用,理解如何构建URI、创建ContentValues对象以进行数据操作。 4. 理解Cursor的工作原理,如何通过Cursor获取数据并进行遍历。 5. 实践跨应用数据共享,模拟两个应用之间通过...

    ContentResolver

    在Android系统中,`ContentResolver` 是一个至关重要的组件,它作为应用程序与系统服务之间...通过学习和实践`ContentResolverDemo5.9`,开发者可以更好地掌握如何高效地使用`ContentResolver`来实现跨应用的数据交互。

    ContentResolver使用场景

    此外,我们还学习了如何创建和使用上下文菜单,以及如何处理ListView的点击事件。这次实验不仅提升了对Android编程的理解,也增强了代码阅读和错误调试能力,对于理解Android四大组件之一的ContentProvider及其与...

    安卓ContentResolver操作通讯录demo

    在安卓开发中,ContentResolver是Android系统提供的一种接口,用于与内容提供者(Content Provider)进行交互,从而访问和管理...通过深入学习和实践,可以扩展到更复杂的场景,如搜索联系人、处理多个数据表的关联等。

    利用contentprovider和ContentResolver获取手机联系人信息

    在Android系统中,获取手机联系人信息是常见的需求,这通常涉及到...在ContentProivder_APP这个项目中,可能包含了实现这一功能的示例代码,通过学习和分析这些代码,开发者可以更好地理解和实践上述知识。

    ContentResolverDemo,安卓.zip

    在Android开发中,`ContentResolver` 是一个至关重要的组件,它负责应用程序与系统服务之间的数据交互,特别是涉及到数据存储和检索的时候。`ContentResolverDemo` 项目作为一个开源示例,旨在帮助开发者理解如何...

    ContentProvider与ContentResolver跨进程共享数据实例

    程序例子包含了2个独立的Android程序,其中一个负责提供数据并提供本地操作,另外一个可以跨进程访问提供者提供的数据。...由于没有其他多余的代码,功能针对性很强,是学习Android跨进程数据共享的入门助手。

    通讯录(ContentProvider)

    在Android系统中,通讯录是应用之间共享数据的重要机制,这一功能主要依赖于ContentProvider和...对于"AddressBook"这样的项目,我们可以学习如何设计和实现一个完整的通讯录系统,包括数据存储、UI展示以及数据操作。

    博客<ContentProvider数据库共享之 实例讲解>对应源码

    通过分析和学习这篇博客的源码,开发者可以了解到如何在实际项目中实现一个完整的ContentProvider,从而实现数据库数据的安全共享。这不仅有助于提升开发者的技能,还能在多应用数据共享场景下提供有效的解决方案。...

    Android学习资料

    收集的一些关于Android的学习资料,一些常用组件的介绍,和一些难点的资料.包括:android gravity 和 android layout_Gravity,Bundle,ContentResolver,cursor,Fragments ,Fragments,inflater ,Fragment,数据查询query...

    android学习笔记3(联系人应用)

    学习笔记可能包含了一些实际的编程示例,如创建一个简单的应用,展示如何使用ContentResolver和ContactsContract来显示、编辑或删除联系人。这样的实践有助于巩固理论知识,并提升实际开发能力。 总结,这篇...

    安卓SQLite数据库相关-Android学习之数据存储.rar

    在Android中,通常建议使用ContentResolver和Uri来与SQLite交互,特别是在涉及到ContentProvider的情况。 文件“JavaApk源码说明.txt”可能包含了对源码的解释,这将有助于理解如何在实际项目中应用SQLite。源码...

    Pro Android学习:media frameworks小例子

    5. **使用MediaStore**:可能的例子是将录制的媒体文件插入到MediaStore,以便用户可以通过系统的媒体库访问,或者通过ContentResolver查询录制文件的信息。 在`TestMedia`这个文件中,可能包含了实现以上操作的...

    LoadSQLiteManager:用异步加载数据库(LoaderManager,ContentProvider,ContentResolver,SQLiteOpenHelper)

    `LoadSQLiteManager-master`这个压缩包文件可能包含了完整的项目源代码,你可以通过阅读和学习这些代码,进一步了解如何将这些组件结合在一起,实现高效的数据库异步加载。在实际开发中,这样的设计模式有助于提高...

    Pro Android学习:联系人API

    在"Pro Android学习:联系人API"中,我们将深入探讨这些关键知识点。 首先,Android的联系人API分为两大部分:原始联系人API(Legacy Contact API)和ContactsContract API。前者主要用于Android 2.3(Gingerbread...

    Android基础ContentProviderPPT学习教案.pptx

    1. 获取ContentResolver:通过Activity或Context的getContentResolver()方法获取ContentResolver对象,这是与ContentProvider交互的主要工具。 2. 数据操作:利用ContentResolver执行对数据的操作,包括: - 查询...

    android多媒体学习代码

    Android的`ContentResolver`和`Uri`用于访问外部存储中的多媒体文件。`MediaStore`提供了一个数据库,用于管理和检索媒体文件,如照片和音乐。 通过研究这个压缩包中的示例代码,开发者可以熟悉以上所有概念,并...

    程序源代码

    总之,`ContentResolverDemo`这个项目为开发者提供了一个学习如何在Android应用中有效利用`ContentResolver`与系统数据交互的实例。通过深入理解`ContentResolver`的工作原理和使用技巧,开发者可以更好地设计和实现...

    摘抄罗升阳(大神)的contentprovider示例

    罗升阳,被誉为Android开发的大神,他的代码示例往往深入浅出,易于理解,是许多开发者学习Android技术的重要参考。在这个压缩包中,我们可以看到与ContentProvider相关的三个主要元素:`ContentProvider`、`...

Global site tag (gtag.js) - Google Analytics