ContentProvider的實現

這幾天有些忙,要做關於訪問exchange服務器的技術調研,環境總出問題。微軟的東西還真複雜!看了看android2.2的源碼,本來想寫點東西,但想想也沒什麼好寫的。主要是關於軟鍵盤事件的傳遞,網上有很多這方面的文章。今天看了看contentprovider,就寫點這方面的東西吧。

 

android爲我們提供了ContentProvider來實現數據的共享,一個程序如果想讓別的程序可以操作自己的數據,就定義自己的ContentProvider。今天就簡單介紹一它的實現方法。換膚可能會用到。

 

第一步:繼承ContentProvider,代碼如下:

package com.test.android.skin.main;

import java.util.List;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;

public class Provider extends ContentProvider{

	private SQLiteOpenHelper helper;
	
	@Override
	public boolean onCreate() {
		helper = new SqLHelper(this.getContext());
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		List<String> paths = uri.getPathSegments();
		String tableName = paths.get(0);
		SQLiteDatabase db = helper.getReadableDatabase();
		return db.query(tableName, null, null, null, null, null, null);
	}

	@Override
	public String getType(Uri uri) {
		return null;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		List<String> paths = uri.getPathSegments();
		String tableName = paths.get(0);
		Log.d("Tag",tableName + ":::"+uri.toString());
		SQLiteDatabase db = helper.getWritableDatabase();
		db.insert(tableName, null, values);
		return uri;
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}

}

 

 

第二部:在AndroidManifest.xml添加provider

<provider android:authorities="com.test.android.skin.main.provider" android:name="Provider"></provider>

 

以上就做完一個provider了。

 

使用方式:

package com.test.android.skin.myskin;

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

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ContentResolver resolver = this.getContentResolver();
        Uri url = Uri.parse("content://com.test.android.skin.main.provider/skinTab");
        ContentValues values = new ContentValues();
        values.put("id", "40");
        values.put("packname", "org.yangzc.package40");
        resolver.insert(url, values);

        Uri queryurl = Uri.parse("content://com.test.android.skin.main.provider/skinTab");
        Cursor c = resolver.query(queryurl, null, null, null, null);
        while(c.moveToNext()){
        	String id = c.getString(c.getColumnIndex("id"));
        	String packname = c.getString(c.getColumnIndex("packname"));
        	Log.d("Tag", "Id:"+id + "   packname:" + packname);
        }
    }
}

 

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 4896
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章