【Android学习】Android数据的四种储存方式(4)--ContentProvider

ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制。一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制。并且此种方式忽略了底层的数据存储实现,ContentProvider提供了一种统一的通过Uri实现数据操作的方式。其步骤为:

  1. 在当前应用程序中定义一个ContentProvider。

  2. 在当前应用程序的AndroidManifest.xml中注册此ContentProvider

  3. 其他应用程序通过ContentResolver和Uri来获取此ContentProvider的数据。

1、开发ContentProvider

开发ContentProvider需要两步:

--开发一个ContentProvider的子类,该子类需要实现query()、insert()、updata()、delete()等方法

--在AndroidManifest.xml文件中注册该ContentProvider,制定android:authorities属性

2、使用ContentResolver调用方法

具体实现代码如下:

在应用程序A中:

package com.ye_yun_lin.contentprovider;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;

public class MainActivity extends ContentProvider {

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getType(Uri uri) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean onCreate() {
		SQLiteDatabase sqLiteDatabase=this.getContext().openOrCreateDatabase("test_provider", Context.MODE_PRIVATE, null);
		sqLiteDatabase.execSQL("create table tab(_id integer primary key, name verchar(255))");
		ContentValues contentValues=new ContentValues();
		contentValues.put("name", "zhangsan");
		sqLiteDatabase.insert("tab", "_id", contentValues);
		sqLiteDatabase.close();
		return true;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		SQLiteDatabase sqLiteDatabase=this.getContext().openOrCreateDatabase("test_provider", Context.MODE_PRIVATE, null);
		Cursor cursor=sqLiteDatabase.query("tab", null,null,null,null,null,null);
		return cursor;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}

在AndroidManifest中注册:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ye_yun_lin.contentprovider"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.ye_yun_lin.contentprovider.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider
            android:name="com.ye_yun_lin.contentprovider.MainActivity"
            android:authorities="com.ye_yun_lin.contentprovider.MainActivity.pro"
            android:exported="true"/>
    </application>

</manifest>

在程序B中调用:

package com.ye_yun_lin.contentresolver;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//获取上下文
		Context ctx = MainActivity.this;
		 //获取ContentResolver对象
		ContentResolver resolver = ctx.getContentResolver();
		 //获取Uri对象
		Uri uri = Uri.parse("content://com.ye_yun_lin.contentprovider.MainActivity.pro/");
		 //获取数据
		Cursor c = resolver.query(uri, null, null, null, null);
		c.moveToFirst();
		for(int i=0; i<c.getCount(); i++){
			int index = c.getColumnIndexOrThrow("name");
			String src = c.getString(index);
			System.out.println(src);
			c.moveToNext();
		}
	}
}

运行结果如下:



【Android学习】Android数据的四种储存方式(4)--ContentProvider,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。