安卓 内容提供者
来源:互联网 发布:深入浅出数据分析azw3 编辑:程序博客网 时间:2024/05/09 22:00
ContentProvider(内容提供者)是安卓四大组件之一,用来共享应用程序内的数据,当你需要把你的应用程序的数据共享给其他应用程序的时候,才需要用它该组件对外提供了其他应用可以直接访问的增删改查方法。
一般像底层做法就是:一是先需要内容提供者。写一个提供者的类继承 ContentProvider,重写这个类的增删改查的方法。进而就可以进行你先要的操作。其代码如下:
package com.example.an_sqlite.provider;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.support.annotation.Nullable;import android.util.Log;import com.example.an_sqlite.db.DbHelper;/** * Created by Administrator on 2017/2/16. */public class MyProvider extends ContentProvider { private DbHelper dbHelper; private SQLiteDatabase db; private UriMatcher uriMatcher; private Cursor c; private static final int PERSONS = 1; private static final int PERSON = 2; @Override public boolean onCreate() { Log.i("test", "onCreate"); dbHelper = new DbHelper(getContext(), "questions.db", null, 2); db = dbHelper.getReadableDatabase(); //实例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //给匹配器中添加匹配规则 uriMatcher.addURI("com.example.an_sqlite.person", "persons", MyProvider.PERSONS); uriMatcher.addURI("com.example.an_sqlite.person", "persons/#", MyProvider.PERSON); return false; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.i("test", "query"); return db.query(true,"person",projection,selection,selectionArgs,null,null, sortOrder,null); //开始匹配// int code = uriMatcher.match(uri);// switch (code) {// case MyProvider.PERSONS:// //查询所有// c = db.query(true, "person", projection, selection, selectionArgs, null, null, sortOrder, null);// Log.i("test", "所有");// return c;// case MyProvider.PERSON:// //得到#的值// long id = ContentUris.parseId(uri);// Log.i("test", "单个");// //查询单个:// c = db.rawQuery("select * from person where _id=?",new String[]{id+""});// return c;// }// return null; } @Nullable @Override public String getType(Uri uri) { return 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) { return 0; }}
其次便是内容的访问者,先获取内容的访问者,在进行接下来的操作,博主进行的是查询的操作。其代码如下:
package com.example.an_contentresolver;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText et_main_id;private ContentResolver cr;private Uri uri;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_id = (EditText) findViewById(R.id.et_main_id); //获取内容访问者 cr = getContentResolver();} public void getData(View view) { //路径 Uri uri=Uri.parse("content://com.example.an_sqlite.data"); uri = Uri.parse("content://com.example.an_sqlite.person/persons");
// if (TextUtils.isEmpty(et_main_id.getText())) {
// uri = Uri.parse(“content://com.example.an_sqlite.person/persons”);
//
// } else {
// String id = et_main_id.getText().toString();
// uri = Uri.parse(“content://com.example.an_sqlite.person/persons/” + id);
// }
// Cursor cursor = cr.query(uri, null, null, null, null);
//
//
// while (cursor.moveToNext()) {
// int id = cursor.getInt(cursor.getColumnIndex(“_id”));
// String name = cursor.getString(cursor.getColumnIndex(“pname”));
// int age = cursor.getInt(cursor.getColumnIndex(“page”));
// Log.i(“test”, id + “” + name + “” + age);
}
}
当然别忘了配置内容提供者的清单文件,其代码如下:
<provider android:authorities="com.example.an_sqlite.data" android:name=".provider.MyProvider" android:exported="true" > </provider>
虽然现在一般都是只需拿数据,不需要去提供了,但是了解一些底层的做法也是好的。
- 安卓内容提供者
- 安卓 内容提供者
- 【安卓笔记】内容提供者
- 安卓:内容提供者(导论)
- 安卓:内容提供者(基础知识)
- 安卓之内容提供者获取通讯录
- 安卓四大组件----内容提供者
- 安卓基础总结 内容提供者
- 安卓基础:内容提供者ContentProvider
- 安卓之ContentProvider内容提供者
- Android Content Provider Tutorial--安卓内容提供者系列1--内容提供者介绍
- Android Content Provider Tutorial--安卓内容提供者系列2--内容提供者用法
- Android Content Provider Tutorial--安卓内容提供者系列4--如何创建内容提供者
- 安卓四大组件之一ContentProvider内容提供者
- 安卓--第五天--内容提供者和安卓中的布局
- Android Content Provider Tutorial--安卓内容提供者系列3--操作安卓联系人
- 安卓SQLite和内容提供者(ContentProvide)史上最通俗和深入
- 安卓存储数据和文件系列4:内容提供者(Content Provider)方式
- Hadoop源码解析之YARN服务端作业提交流程
- 记一次操蛋的mysql注入之旅
- javaEE开发工具专题
- Revit API 之 动态修改Ribbon命令控件快捷键
- elastic笔记:logstash插件安装
- 安卓 内容提供者
- 用pinyin4j实现汉字转拼音
- C++ deprecated conversion from string constant to 'char *'
- Linux下的后台程序以及开机自启动
- 一位资深程序员大牛给予Java学习者的学习路线建议
- 构造函数初始化表的使用规则
- ListView和ScrollView 回到顶部
- Android动画(四):RevealEffect
- MySql的数据类型