找呀志_ContentResolver操作ContentProvider数据

当需要外部的应用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>



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

原文地址:https://www.cnblogs.com/lcchuguo/p/4818642.html