当前位置:   article > 正文

Android—内容提供者_android什么是内容提供者

android什么是内容提供者

思维导图:



一、什么是内容提供者?

    ContentProvider(内容提供者)是android中的四大组件之一。ContentProvider为不同的软件之间数据共享,提供统一的接口。

ContentProvider是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数

据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。ContentProvider定义一

个对外开放的接口,从而使得其他的应用可以使用我们自己应用中的文件、数据库内存储的信息。实际开发过程中并不是很常用,

Android系统中的信息,图片库,联系人常用到,但谷歌工程师已经帮我封装好了,我们只需要访问即可。

  

 

二、为什么会有内容提供者?

          内容提供者向其它的应用程序提供了一个数据访问的方式,这种方式相对于文件存储共享和sharedpreferences共享数据而言

话,它提供了一个统一的数据访问方式,更方便更有效。


 三、如何创建一个内容提供者?

  

首先:写一个类继承Contentprovider,重写六个方法如下实例所示


其次:在AndroidManifest.xml的<application>节点下配置<provider>指定name和authorities属性

实例:

  1. package com.sun.administrator.sqlite;
  2. import android.content.ContentProvider;
  3. import android.content.ContentValues;
  4. import android.database.Cursor;
  5. import android.database.sqlite.SQLiteDatabase;
  6. import android.net.Uri;
  7. import android.support.annotation.NonNull;
  8. import android.support.annotation.Nullable;
  9. import android.util.Log;
  10. import com.zking.db.DBHelper;
  11. /**
  12. * Created by Administrator on 2017/7/17 0017.
  13. */
  14. public class MyProvider extends ContentProvider {
  15. @Override
  16. public boolean onCreate() {
  17. Log.i("test","onCreate");
  18. return false;
  19. }
  20. @Nullable
  21. @Override
  22. public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
  23. Log.i("test","query");
  24. //把数据查询出来
  25. DBHelper dbHelper=new DBHelper(getContext(),"test.db",null,1);
  26. SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
  27. //sqLiteDatabase.rawQuery("select * from login",null);
  28. return sqLiteDatabase.rawQuery("select * from login",null);
  29. }
  30. @Nullable
  31. @Override
  32. public String getType(@NonNull Uri uri) {
  33. Log.i("test","getType");
  34. return null;
  35. }
  36. @Nullable
  37. @Override
  38. public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
  39. Log.i("test","insert");
  40. return null;
  41. }
  42. @Override
  43. public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
  44. Log.i("test","delete");
  45. return 0;
  46. }
  47. @Override
  48. public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
  49. Log.i("test","update");
  50. return 0;
  51. }
  52. }

配置信息:

  1. <!--配置内容提供者-->
  2. <provider
  3. android:authorities="com.sun.administrator.sqlite.LOGIN"
  4. android:name=".MyProvider"
  5. android:exported="true"
  6. ></provider>

四、如何进行访问?

 第一步:安装访问的应用程序

 第二步:获取解析器ContentResolver

 第三步:通过解析器调取insert(), delete(), update(), query()方法访问Uri关联的ContentProvider


实例:

  1. package com.sun.administrator.contentresolver;
  2. import android.content.ContentResolver;
  3. import android.database.Cursor;
  4. import android.net.Uri;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.os.Bundle;
  7. import android.util.Log;
  8. public class MainActivity extends AppCompatActivity {
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. //获取上面一个应用程序的数据
  14. //获取内容访问者
  15. ContentResolver cr=getContentResolver();
  16. Uri uri=Uri.parse("content://com.sun.administrator.sqlite.LOGIN");
  17. Cursor cursor=cr.query(uri,null,null,null,null);
  18. while(cursor.moveToNext()){
  19. int uid=cursor.getInt(cursor.getColumnIndex("uid"));
  20. String uname=cursor.getString(cursor.getColumnIndex("uname")) ;
  21. String upass=cursor.getString(cursor.getColumnIndex("upass")) ;
  22. Log.i("test",uid+" "+uname+" "+upass);
  23. }
  24. }
  25. }



 小结: ①  ContentProvider将应用中的数据对其它应用进行共享, 提供增删改查的方法  

      ②  ContentProvider将数据封装,只暴露出我们希望提供给其它程序的数据  

      ③  ContentProvider统一了数据的访问方式,不必针对不同数据类型采取不同的访问策略  

      ④  ContentProvider中可以注册观察者, 监听数据的变化  


 注意:1、配置信息中name 是完整的类名

     2、authorities是访问Provider时的路径,一定要唯一

     

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/245919
推荐阅读
相关标签
  

闽ICP备14008679号