码迷,mamicode.com
首页 > 其他好文 > 详细

Contentprovider学习笔记

时间:2015-08-06 13:08:22      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

  当应用程序的数据需要被别的应用程序使用时,就必须将应用程序的数据抛出,通常要继承contentprovider类,并且覆写它的方法。下面通过将数据库的数据抛出例子学习一下:

1首先我们必须在应用程序的清单文件里配置provider:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <uses-library android:name="android.test.runner" />
        <activity
            android:name="com.example.database.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.mydatabase.provider.Personprovider"
                    android:authorities="com.mydatabase.personprovider"
             >
        </provider>
        
    </application>

  其中name属性是provider的包名下具体类名,authorities是主机名,是标识这个应用程序的provider的,通常以功能命名(没有具体规范),在uri的匹配时会用到(后面会讲到)。

 

  2实现一个继承contentprovider的类,为了抛出数据和操作数据的方法,android提供了Urimather来实现uri的匹配。contentprovider抛出的数据在别的应用程序里利用contentresolver绑定这唯一的uri来对数据操作的:

 

public class Personprovider extends ContentProvider {

    public static final UriMatcher matcher =new UriMatcher(UriMatcher.NO_MATCH);
    Mydatebase dbhelper;
    
    public static final int  ALL_PERSON=1;
    static
    {
        matcher.addURI("com.mydatabase.personprovider", "query", ALL_PERSON);//红色部分是主机名,后面的是路径
    }
    
    @Override
    public boolean onCreate() {
        // TODO Auto-generated method stub
        dbhelper=new Mydatebase(getContext());
//        SQLiteDatabase db=dbhelper.getReadableDatabase();
                
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        // TODO Auto-generated method stub
        int result=matcher.match(uri);
        Cursor cur=null;
        if(result==ALL_PERSON)//匹配成功时返回的是ALL_PERSON的值
        {
        SQLiteDatabase db=dbhelper.getWritableDatabase();
        cur=db.query("person", projection, selection, selectionArgs, null, null, null);
        return cur;
        }
        else
        {
            throw new IllegalArgumentException("无法找到匹配对象!");
        }
    }

 

 3、在别的应用里只需要获取contentresolver,然后带入相应的uri来对数据进行操作:(下面代码是通过一个button按钮获取数据库内person表的数据)

public void click(View View)
{
    Uri uri=Uri.parse("content://com.mydatabase.personprovider/query");
    ContentResolver rs=getContentResolver();
//    rs.query(uri, null, selection, selectionArgs, sortOrder)
    Cursor cur=rs.query(uri, null, null, null, null);
    
    while(cur.moveToNext())
    {
        System.out.println(cur.getString(0));
        
    }
    
}

 

Contentprovider学习笔记

标签:

原文地址:http://www.cnblogs.com/bokeofzp/p/4707573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!