当需要外部的应用ContentProvider该数据被添加、删、修改和查询操作。可以使用ContentResolver 类完成

要得到ContentResolver 物,可以使用Activity提供getContentResolver()办法。

ContentResolver 类提供了与ContentProvider类同样签名的四个方法:

  1. public Uri insert(Uri uri, ContentValues values)该方法用于往ContentProvider加入数据。
  2. public int delete(Uri uri, String selection, String[] selectionArgs)该方法用于从ContentProvider删除数据。
  3. public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)该方法用于更新ContentProvider中的数据。

  4. public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)该方法用于从ContentProvider中获取数据。

这些方法的第一个參数为Uri,代表要操作的是哪个ContentProvider和对当中的什么数据进行操作。如果给定的是

Uri.parse(“content://cn.itcast.provider.personprovider/person/10”)那么将会对主机名为cn.itcast.provider.personprovider的ContentProvider进行操作。操作的数据为person表中id为10的记录。

使用ContentResolver对ContentProvider中的数据进行加入、删除、改动和查询操作:

  1. 创建内容解析器对象 ContentResolver
  2. 定义URI
  3. 进行增删改查方法
详细事例:
实现:对上一个项目的共享进行查询并在listview中显示
实现效果例如以下:

MainActivity.java
package com.example.android_provider;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter;
import android.widget.ListView; public class MainActivity extends Activity { private ListView lv_user;
// 内容解析器
private ContentResolver contentResolver;
// 操作的标志
private static final String AUTHORITIE = "www.csdn.com.provider.userContentProvider"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 模型层
// 创建内容解析器对象
contentResolver = getContentResolver(); // 控制层
Cursor c = contentResolver.query(
Uri.parse("content://" + AUTHORITIE + "/query"), new String[] {
"userid as _id", "username", "userphone" }, null, null,
null);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.list_item_user, c, new String[] { "username",
"userphone" },
new int[] { R.id.tv_name, R.id.tv_phone },
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); // 视图层
lv_user = (ListView) findViewById(R.id.listView1);
lv_user.setAdapter(adapter);
} }

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="outsideInset"
> </ListView> </RelativeLayout>

list_item_user.xml
<?xml version="1.0" encoding="utf-8"?

>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >     <Button
        android:id="@+id/btn_delete"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp"
        android:background="@drawable/del"
        android:onClick="delete" />     <Button
        android:id="@+id/btn_update"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@+id/btn_delete"
        android:onClick="update"
       android:layout_margin="5dp"
 
        android:background="@drawable/refresh" />     <TextView
        android:id="@+id/tv_name"
        android:layout_width="60dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btn_update"
        android:layout_alignBottom="@+id/btn_update"
        android:layout_alignParentLeft="true"
        android:paddingLeft="10dp"
        android:text="TextView" 
        />     <TextView
        android:id="@+id/tv_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/tv_name"
        android:layout_toRightOf="@+id/tv_name"
        android:paddingLeft="10dp"
        android:text="TextView" /> </RelativeLayout>

版权声明:本文博主原创文章。博客,未经同意不得转载。

找呀志_ContentResolver操作ContentProvider数据的更多相关文章

  1. ContentProvider数据访问详解

    ContentProvider数据访问详解 Android官方指出的数据存储方式总共有五种:Shared Preferences.网络存储.文件存储.外储存储.SQLite,这些存储方式一般都只是在一 ...

  2. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  3. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  4. Scala学习——操作外部数据

    scala操作外部数据 一.scala读取文件及网络数据 package top.ruandb.scala.Course08 import scala.io.Source object FileApp ...

  5. 在spark中操作mysql数据 ---- spark学习之七

    使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...

  6. C#操作Excel数据增删改查(转)

    C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文件,并添加两张工作表. 工作表1: UserInfo表,字段:UserId.UserName.Age.Address.CreateT ...

  7. js中如何操作json数据

    一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...

  8. C#操作Excel数据增删改查示例

    Excel数据增删改查我们可以使用c#进行操作,首先创建ExcelDB.xlsx文件,并添加两张工作表,接下按照下面的操作步骤即可 C#操作Excel数据增删改查. 首先创建ExcelDB.xlsx文 ...

  9. JS 操作一个数据值

    任何语言都有自己的操作数据的方法: Js也不例外,js有3种重要的方式来操作一个数据值. 1>复制它.例如把它赋给一个新的变量. 2>把它作为参数传递给一个函数或方法. 3>可以和其 ...

随机推荐

  1. 自己动手写CPU之第六阶段(2)——移动操作指令实现思路

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第21篇,我尽量每周四篇 6.2 移动操作指令实现思路 6.2.1 实现思路 这6条移动操作指令能够分为两类:一类是不涉及特殊 ...

  2. 大规模集群管理工具Borg

    Google的大规模集群管理工具Borg 概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机 ...

  3. java split小结(转)

    2016.03.27下午参加华为机试,简单扫了一眼几个题的标题,选择了一道字符串问题,其实该题非常非常的简单,可以说是简单的不能再简单了,而且有很多种解法,上机时我选择了直接借用java提供的一些函数 ...

  4. C#的c/s做出开灯关灯计算?

    static void light(Boolean[] lights,int n) {     if (n <= 1 || lights.Length<5) return;     for ...

  5. htc one x刷机记录

    这几天有些空余时间都用来刷htc one x,来说说刷机的艰难史吧. 首先是利用百度云rom刷机,本来一直用小米系统,突然发现百度云也能够搞个,所以心血来潮要刷个百度云,先利用软件解锁,哪知道没细致看 ...

  6. 如何设置一个activity透明(转)

    1.在AndroidManifest.xml文件中设置: ? 1 android:theme="@android:style/Theme.Translucent 此代码固定为全背景透明. 2 ...

  7. LoaderManager使用具体解释(二)---了解LoaderManager

    了解LoaderManager 这篇文章将介绍LoaderManager类,这是该系列的第二篇文章. 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders 四:实例: ...

  8. 智能家居项目(3):编译工具makefile

    board文件夹中,基本的代码结构分为了src,include两个子文件夹.分别存放源码文件. #CC=arm-linux-gcc CC=gcc CFLAGS=-lpthread INCPATH=-I ...

  9. Mono for Andriod学习与实践(1)— 初体验

    对于Andriod的开发者来说,相信Java语言是第一选择,可是对于.Net开发者来说,要想利用C#在Andriod平台上开发,Mono提供了相应的开发平台来实现,Mono for Andriod就是 ...

  10. CF 452A(Eevee-直接试)

    A. Eevee time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...