Android的四大组件之ContentProvider(对外程序共享数据)

来源:互联网 发布:serge lang知乎 编辑:程序博客网 时间:2024/05/22 02:18

1、在要对外共享的程序,新建对外共享activity,及要分享的数据(以之前的SuiShenJi项目为例共享记事本内容)

//需要继承ContentProvider,重写增删改查的方法public class Provider extends ContentProvider {// 数据库操作对象DbOpenHelper dbopenhelper;// UriMatch对象private final static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);private final static int code1 = 1; // 表全部内容private final static int code2 = 2; // 表单条内容// 静态代码块static {matcher.addURI("com.Provider.Provider", "JiShiBo", code1); // 表全部内容 "JiShiBo<span style="font-family: Arial, Helvetica, sans-serif;">"表名</span>matcher.addURI("com.Provider.Provider", "JiShiBo/#", code2); // 表单条内容}/** 实例化数据库操作对象 */@Overridepublic boolean onCreate() {// TODO Auto-generated method stubdbopenhelper = new DbOpenHelper(getContext());return false;}/** * 对输入的URI进行匹配 返回自定义返回结果类型标示(id) * */@Overridepublic String getType(Uri arg0) {// TODO Auto-generated method stubswitch (matcher.match(arg0)) {case code1:return "vnd.android.cursor.dir/notes";case code2:return "vnd.android.cursor.item/notes";// 抛出可能的Uri错误异常default:throw new IllegalArgumentException("Unkwon Uri:" + arg0.toString());}}/** * 插入数据库操作 code1 插入数据库所有值 code2 根据id插入一条数据 * */@Overridepublic Uri insert(Uri arg0, ContentValues arg1) {// TODO Auto-generated method stubSQLiteDatabase db = dbopenhelper.getReadableDatabase();switch (matcher.match(arg0)) {case code1:long l1 = db.insert("JiShiBo", "textname", arg1);// 得到代表新增记录的UriUri inserturi = ContentUris.withAppendedId(arg0, l1);return inserturi;case code2:long l2 = db.insert("JiShiBo", "textname", arg1); //表名、字段名、插入值String Uripash = arg0.toString();// 建立新的Uri,添加新的记录String pash = Uripash.substring(0, Uripash.lastIndexOf("/")) + l2;return Uri.parse(pash);default:throw new IllegalArgumentException("Unkwon Uri:" + arg0.toString());}}/** 删除操作 */@Overridepublic int delete(Uri arg0, String arg1, String[] arg2) {// TODO Auto-generated method stubSQLiteDatabase db = dbopenhelper.getReadableDatabase();int count = 0;switch (matcher.match(arg0)) {case code1:count = db.delete("JiShiBo", arg1, arg2);return count;case code2:long id = ContentUris.parseId(arg0); // 返回路径IDString where = "id=" + id;count = db.delete("JiShiBo", where, arg2);return count;default:throw new IllegalArgumentException("Unkwon Uri:" + arg0.toString());}}/** 更新数据库操作 */@Overridepublic int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {// TODO Auto-generated method stubSQLiteDatabase db = dbopenhelper.getReadableDatabase();int count = 0;switch (matcher.match(arg0)) {case code1:count = db.update("JiShiBo", arg1, arg2, arg3);return count;case code2:long id = ContentUris.parseId(arg0);String where = "id=" + id;count = db.update("JiShiBo", arg1, where, arg3);return count;default:throw new IllegalArgumentException("Unkwon Uri:" + arg0.toString());}}/** * 查询数据库操作 table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。<br> *    columns:要查询出来的列名。相当于select语句select关键字后面的部分。<br> *    arg2:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符"?"<br> *    arg3:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。<br> *    groupBy:相当于select语句groupby关键字后面的部分<br> * having:相当于select语句having关键字后面的部分<br> * orderBy:相当于select语句orderby关键字后面的部分<br> * limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分<br> * */@Overridepublic Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,String arg4) {// TODO Auto-generated method stubSQLiteDatabase db = dbopenhelper.getReadableDatabase();switch (matcher.match(arg0)) {case code1:// query方法三个参数(表名称,筛选条件,参数数组,groupBy,having,sortOrder排序)return db.query("JiShiBo", arg1, arg2, arg3, null, null, arg4);case code2:long id = ContentUris.parseId(arg0);String where = "id=" + id;return db.query("JiShiBo", null, where, null, null, null, null);default:throw new IllegalArgumentException("Unkwon Uri:" + arg0.toString());}}}



最后在AndroidManifest.xml文件注册

<!-- 数据库记事薄表对外开放 -->      <provider android:name="包.类" android:authorities="com.Provider.Provider" //标识符  <span style="font-family: Arial, Helvetica, sans-serif;">android:exported="true"   //对外开放></provider></span>


共享程序文件

package com.contentprovider.action;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{private EditText id, name, read;private Button btn_add, btn_find,btn_del,btn_updata,btn_empty;private listviewAdapter adapter;private List<Bean> list;private ListView listview;private final static String URI="content://com.Provider.Provider/JiShiBo";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();list=getList();adapter=new listviewAdapter(list, this);listview.setAdapter(adapter);}private void init() {listview=(ListView) findViewById(R.id.listview);id = (EditText) findViewById(R.id.id); //输入idname = (EditText) findViewById(R.id.name);//字段名1 值read = (EditText) findViewById(R.id.read);//字段名2 值btn_add = (Button) findViewById(R.id.bt_add);//插入数据库功能btn_find = (Button) findViewById(R.id.bt_search);//查找功能btn_del = (Button) findViewById(R.id.bt_del);//删除功能btn_updata = (Button) findViewById(R.id.bt_updata);//更新功能btn_empty = (Button) findViewById(R.id.bt_empty);//清空功能btn_add.setOnClickListener(this);btn_find.setOnClickListener(this);btn_del.setOnClickListener(this);btn_updata.setOnClickListener(this);btn_empty.setOnClickListener(this);}@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubswitch (arg0.getId()) {case R.id.bt_add:ContentResolver res=getContentResolver();Uri uri=Uri.parse(URI);ContentValues values=new ContentValues();values.put("textname",name.getText().toString());values.put("textread", read.getText().toString());SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");values.put("time", sdf.format(new Date()));res.insert(uri, values);list=getList();adapter=new listviewAdapter(list, this);listview.setAdapter(adapter);adapter.notifyDataSetChanged();//更新listview内容break;case R.id.bt_search:res=getContentResolver();uri=Uri.parse(URI+"/"+id.getText().toString());Cursor cursor=res.query(uri, null, null, null, null);String textname=cursor.getString(cursor.getColumnIndex("textname"));String textread=cursor.getString(cursor.getColumnIndex("textread"));name.setText(textname);read.setText(textread);break;case R.id.bt_del:res=getContentResolver();uri=Uri.parse(URI+"/"+id.getText().toString());res.delete(uri, null, null);list=getList();adapter=new listviewAdapter(list, this);listview.setAdapter(adapter);adapter.notifyDataSetChanged();break;case R.id.bt_updata:res=getContentResolver();uri=Uri.parse(URI+"/"+id.getText().toString());values=new ContentValues();values.put("textname",name.getText().toString());values.put("textread", read.getText().toString());sdf=new SimpleDateFormat("yyyy-MM-dd");values.put("time", sdf.format(new Date()));res.update(uri, values, null, null);list=getList();adapter=new listviewAdapter(list, this);listview.setAdapter(adapter);adapter.notifyDataSetChanged();break;case R.id.bt_empty:res=getContentResolver();uri=Uri.parse(URI);res.delete(uri, null, null);list=getList();adapter=new listviewAdapter(list, this);listview.setAdapter(adapter);adapter.notifyDataSetChanged();break;default:break;}}private List<Bean> getList(){List<Bean> list=new ArrayList<Bean>();//从数据库中读取数据ContentResolver res=getContentResolver();Uri uri=Uri.parse(URI);//得到返回的MIME类型String type=res.getType(uri);Toast.makeText(this, "返回类型是"+type, 1000).show();Cursor cursor=res.query(uri, null, null, null, null);while (cursor.moveToNext()) {Bean bean=new Bean();String id=cursor.getString(cursor.getColumnIndex("id"));String name=cursor.getString(cursor.getColumnIndex("textname"));String read=cursor.getString(cursor.getColumnIndex("textread"));bean.setId(id);bean.setName(name);bean.setRead(read);list.add(bean);}return list;}}


0 0
原创粉丝点击