Android四大组件之一ContentProvider与ContentResolver

     1  ContentProvider(内容提供者)是Android中的四大组件之一。主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作


    A  在内容提供者中新建一个类继承 ContentProvider 

    B  重写里面的六个方法:onCreate(); 在创建ContentProvider时调用 

                                          getType();  用于返回指定的Uri中的数据的MIME类型

                                          query(); 进行查询时调用

                                          detele() 进行删除操作时调用

                                          update(); 进行修改操作时调用

                                          insert();  进行增加操作时调用

     C  在项目的清单文件中配置     

                      其中authorities 是唯一的,最好的包名+_____

                             name 对应的该类名

                             exported   是否被发现(暴露,数据共享)

   完成这三步  ContentProvider(内容提供者)基本上算是写完了


public class MyContentProvider extends ContentProvider{
    private SQLiteDatabase db;
    private UriMatcher uriMatcher;
    @Override
    public boolean onCreate() {
        //创建数据库
        DBUtil dbutil = new DBUtil(getContext(), "G150820.db", null, 1);
        db = dbutil.getReadableDatabase();
        return false;
    }
    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
       
       return db.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,null);
    }


    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

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

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

     //   db.update("student",values,selection,selectionArgs);

        return 0;
    }
}


      2  当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获ContentResolver对象,可以使用Context提供的getContentResolver();

          A  要得到被人的数据,首先得获取内容访问者

                   ContentResolver ct=getContResolver();


         B    模拟一个查询,那么其他的增删改就是一样的了:代码如下

        ct.query();ct.insert();ct.update();ct.delete();

                 Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为三部分。
                 第一部分是"content://"。可以看作是网址中的"http://"。
                 第二部分是主机名或authority,用于唯一标识这个ContentProvider,外部应用需要根据这个标识来找到它。可以看作                        是网址中的主机名,比如"blog.csdn.NET"。
                 第三部分是路径名,用来表示将要操作的数据。可以看作网址中细分的内容路径。


      uri = Uri.parse("content://com.mdf_android01.android10sqlite.content/student");
                Uri.parse中的参数必须为上个项目(ContentProvider(内容提供者))清单文件中authorities 的值,

           并在前面加 content:// 即可


public class MainActivity extends AppCompatActivity {

    private ContentResolver ct;
    private SimpleCursorAdapter simplecursorAdapter;
    private Uri uri;
    private Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        date();
     //获取内容访问者
        ct = getContentResolver();
    }

    public void getAll(View view){
          //查询所有
            uri = Uri.parse("content://com.mdf_android01.android10sqlite.content/student");
            cursor = ct.query(uri,null,null,null,null);
             while(cursor.moveToNext()){
               int id=cursor.getInt(cursor.getColumnIndex("_id"));
               String name=cursor.getString(cursor.getColumnIndex("name"));
               int age=cursor.getInt(cursor.getColumnIndex("age"));
               Log.i("text", "getAll: "+id+name+age);
}
}
}



 方法。

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值