ContentProvider 的简单实现

转自:http://yangzc106.iteye.com/blog/1120415

这几天有些忙,要做关于访问exchange服务器的技术调研,环境总出问题。微软的东西还真复杂!看了看android2.2的源码,本来想写点东西,但想想也没什么好写的。主要是关于软键盘事件的传递,网上有很多这方面的文章。今天看了看contentprovider,就写点这方面的东西吧。

 

android为我们提供了ContentProvider来实现数据的共享,一个程序如果想让别的程序可以操作自己的数据,就定义自己的ContentProvider。今天就简单介绍一它的实现方法。换肤可能会用到。

 

第一步:继承ContentProvider,代码如下:

Java代码   收藏代码
  1. package com.test.android.skin.main;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.content.ContentProvider;  
  6. import android.content.ContentValues;  
  7. import android.database.Cursor;  
  8. import android.database.sqlite.SQLiteDatabase;  
  9. import android.database.sqlite.SQLiteOpenHelper;  
  10. import android.net.Uri;  
  11. import android.util.Log;  
  12.   
  13. public class Provider extends ContentProvider{  
  14.   
  15.     private SQLiteOpenHelper helper;  
  16.       
  17.     @Override  
  18.     public boolean onCreate() {  
  19.         helper = new SqLHelper(this.getContext());  
  20.         return false;  
  21.     }  
  22.   
  23.     @Override  
  24.     public Cursor query(Uri uri, String[] projection, String selection,  
  25.             String[] selectionArgs, String sortOrder) {  
  26.         List<String> paths = uri.getPathSegments();  
  27.         String tableName = paths.get(0);  
  28.         SQLiteDatabase db = helper.getReadableDatabase();  
  29.         return db.query(tableName, nullnullnullnullnullnull);  
  30.     }  
  31.   
  32.     @Override  
  33.     public String getType(Uri uri) {  
  34.         return null;  
  35.     }  
  36.   
  37.     @Override  
  38.     public Uri insert(Uri uri, ContentValues values) {  
  39.         List<String> paths = uri.getPathSegments();  
  40.         String tableName = paths.get(0);  
  41.         Log.d("Tag",tableName + ":::"+uri.toString());  
  42.         SQLiteDatabase db = helper.getWritableDatabase();  
  43.         db.insert(tableName, null, values);  
  44.         return uri;  
  45.     }  
  46.   
  47.     @Override  
  48.     public int delete(Uri uri, String selection, String[] selectionArgs) {  
  49.         return 0;  
  50.     }  
  51.   
  52.     @Override  
  53.     public int update(Uri uri, ContentValues values, String selection,  
  54.             String[] selectionArgs) {  
  55.         return 0;  
  56.     }  
  57.   
  58. }  

 

 

第二部:在AndroidManifest.xml添加provider

Java代码   收藏代码
  1. <provider android:authorities="com.test.android.skin.main.provider" android:name="Provider"></provider>  

 

以上就做完一个provider了。

 

使用方式:

Java代码   收藏代码
  1. package com.test.android.skin.myskin;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.ContentResolver;  
  5. import android.content.ContentValues;  
  6. import android.database.Cursor;  
  7. import android.net.Uri;  
  8. import android.os.Bundle;  
  9. import android.util.Log;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.main);  
  17.           
  18.         ContentResolver resolver = this.getContentResolver();  
  19.         Uri url = Uri.parse("content://com.test.android.skin.main.provider/skinTab");  
  20.         ContentValues values = new ContentValues();  
  21.         values.put("id""40");  
  22.         values.put("packname""org.yangzc.package40");  
  23.         resolver.insert(url, values);  
  24.   
  25.         Uri queryurl = Uri.parse("content://com.test.android.skin.main.provider/skinTab");  
  26.         Cursor c = resolver.query(queryurl, nullnullnullnull);  
  27.         while(c.moveToNext()){  
  28.             String id = c.getString(c.getColumnIndex("id"));  
  29.             String packname = c.getString(c.getColumnIndex("packname"));  
  30.             Log.d("Tag""Id:"+id + "   packname:" + packname);  
  31.         }  
  32.     }  
  33. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值