自定义提供者

 import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) {
super(context, "users.db", null, 1);
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO 初始化数据库
db.execSQL("create table t_user(_id integer primary key,uname,upass,money)"); db.execSQL("create table t_order(_id integer primary key,user_id,price,productname)"); db.execSQL("insert into t_user(uname,upass,money) values('lisi','123',200)"); db.execSQL("insert into t_user(uname,upass,money) values('zhangsi','1234',2000)");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 数据库升级时执行该方法
if(newVersion>oldVersion)
{
db.execSQL("drop table if exists t_user");
db.execSQL("drop table if exists t_order");
//并且重新初始化数据库也可以不重新加载
onCreate(db);
} } }

DBHelper

 import com.qianfeng.gp08_day25_contentprovider1.tool.DBHelper;

 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; public class UserContentProvider extends ContentProvider { //声明该ContentProvider的唯一标识--通常使用包名+数据库名--必须小写
public static final String AUTHORITY ="com.qianfeng.gp08_day25_contentprovider1.users"; //为该组件中可以被外界访问的数据库中的资源定义Code标识
public static final int CODE_USER = 1;
public static final int CODE_ORDER = 8; //定义访问资源的Uri的匹配器对象--使用该类生成被访问的资源的Uri
private static UriMatcher uriMatcher; static{
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//content://com.qianfeng.gp08_day25_contentprovider1.users/user
uriMatcher.addURI(AUTHORITY, "user", CODE_USER); //content://com.qianfeng.gp08_day25_contentprovider1.users/order
uriMatcher.addURI(AUTHORITY, "order", CODE_ORDER);
} private DBHelper dbHelper; @Override
public boolean onCreate() {
// TODO 初始化 数据库操作的工具类
dbHelper = new DBHelper(getContext());
return false;
} @Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = null; int code = uriMatcher.match(uri); switch(code)
{
case CODE_USER:
cursor = db.query("t_user", projection, selection, selectionArgs, null, null, sortOrder);
break;
case CODE_ORDER:
cursor = db.query("t_order", projection, selection, selectionArgs, null, null, sortOrder);
break;
}
return cursor;
} @Override
public Uri insert(Uri uri, ContentValues values) {
// TODO 向数据库中插入数据
SQLiteDatabase db =dbHelper.getWritableDatabase();
if(uriMatcher.match(uri)==CODE_USER)
{
long id = db.insert("t_user", null, values); //返回新插入的记录的 Uri
//content://com.qianfeng.gp08_day25_contentprovider1.users/user/6
return ContentUris.withAppendedId(uri, id);
}
return null;
} @Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO 删除数据库中的数据
SQLiteDatabase db = dbHelper.getWritableDatabase();
int num = 0;
if(uriMatcher.match(uri)==CODE_USER)
{
num = db.delete("t_user", selection, selectionArgs);
}
return num;
} @Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO 修改数据库中的数据
SQLiteDatabase db = dbHelper.getWritableDatabase();
if(uriMatcher.match(uri)==CODE_USER)
{
return db.update("t_user", values, selection, selectionArgs);
}
return 0;
} @Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
} }

usercontentprovider

查询

 package com.qianfeng.gp08_day25_contentresolver3;

 import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import entity.Person;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast; /**
* 访问自定义的ContentProvider---UserContentProvider
*
* @author qq
*
*/
public class MainActivity extends Activity { private ListView listView;
private List<Person> datas;
private ArrayAdapter adapter; private Uri userUri = Uri
.parse("content://com.qianfeng.gp08_day25_contentprovider1.users/user");
private String[] columns = { "_id", "uname", "upass", "money" };
private int current;
private boolean isAdd;
private EditText edit_name, edit_pass, edit_money;
private View view;
private AlertDialog editDialog, deleteDialog; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView);
edit_name = (EditText) findViewById(R.id.edit_name);
edit_pass = (EditText) findViewById(R.id.edit_pass);
edit_money = (EditText) findViewById(R.id.edit_money);
datas = new ArrayList<Person>();
adapter = new ArrayAdapter<Person>(this,
android.R.layout.simple_list_item_1, datas); listView.setAdapter(adapter);
registerForContextMenu(listView); loadData();
initDialog();
} private void loadData() { Cursor cursor = getContentResolver().query(userUri, columns, null,
null, null); while (cursor.moveToNext()) {
long id = cursor.getLong(0);
String name = cursor.getString(1);
String pass = cursor.getString(2);
int money = cursor.getInt(3);
Person person = new Person();
person.set_id(id);
person.setMoney(money);
person.setUname(name);
datas.add(person);
}
cursor.close();//-------------------------
adapter.notifyDataSetChanged();
} @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.item, menu);
current = ((AdapterContextMenuInfo) menuInfo).position;
super.onCreateContextMenu(menu, v, menuInfo);
} @Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_update:
isAdd = false;
edit_name.setText(datas.get(current).getUname());
edit_pass.setText(datas.get(current).getPass());
edit_money.setText("" + datas.get(current).getMoney());
editDialog.show();
break;
case R.id.action_delete:
deleteDialog.show();
break;
case R.id.action_add:
isAdd = true;
edit_name.setText("");
edit_pass.setText("");
edit_money.setText("");
editDialog.show();
break;
}
return super.onContextItemSelected(item);
} private void showDatas() {
datas.clear();
ContentResolver resolver = getContentResolver();
// 先从联系人表中查询所有人的信息
Cursor cursor = resolver.query(userUri, columns, null, null, null);
while (cursor.moveToNext()) {
long id = cursor.getLong(0);
String name = cursor.getString(1);
String pass = cursor.getString(2);
int money = cursor.getInt(3);
Person person = new Person();
person.set_id(id);
person.setMoney(money);
person.setUname(name);
person.setPass(pass);
datas.add(person);
}
cursor.close();//----------------------
adapter.notifyDataSetChanged();
} public void initDialog() {
view = getLayoutInflater().inflate(R.layout.dialog, null);
edit_name = (EditText) view.findViewById(R.id.edit_name);
edit_pass = (EditText) view.findViewById(R.id.edit_pass);
edit_money = (EditText) view.findViewById(R.id.edit_money); editDialog = new AlertDialog.Builder(this).setTitle("联系人添加对话框")
.setIcon(android.R.drawable.ic_menu_add).setView(view)
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = edit_name.getText().toString();
String pass = edit_pass.getText().toString();
String money = edit_money.getText().toString(); ContentValues value = new ContentValues(); if (isAdd) {
if(!name.equals(""))
{
value.put("uname", name);
value.put("upass", pass);
value.put("money", money);
getContentResolver().insert(userUri, value);
}
else Toast.makeText(MainActivity.this, "名字不能为空", Toast.LENGTH_SHORT).show();
} else {
value.put("uname", name);
value.put("upass", pass);
value.put("money", money);
long id = datas.get(current).get_id();
getContentResolver().update(userUri, value, "_id="+id, null);
}
showDatas();
}
}).setNegativeButton("取消", null).setCancelable(false).create(); deleteDialog = new AlertDialog.Builder(this).setTitle("提示")
.setMessage("确实要删除吗?")
.setIcon(android.R.drawable.ic_menu_delete)
.setPositiveButton("确定", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
long id = datas.get(current).get_id();
getContentResolver().delete(userUri, "_id=" + id, null); showDatas();
}
}).setNegativeButton("取消", null).setCancelable(false).create();
} }

MainActivity

查询结果放在listView中长按有上下文菜单选择增删改访问数据库操作数据库

ContentProvider-------------自定义的内容提供者 然后去访问的更多相关文章

  1. ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听

    内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...

  2. android之内容提供者解析

    该系统有两个应用,比较繁琐.但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦.先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作. 我们先看内容提供者所在的应用,代码 ...

  3. Android应用开发基础之九:内容提供者(ContentProvider)

    内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用:就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代 ...

  4. Android开发学习—— ContentProvider内容提供者

    * 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...

  5. android100 自定义内容提供者

    #ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私 ...

  6. android 学习随笔二十一(内容提供者 )

    一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查 ...

  7. 内容提供者(Content Provider)——跨程序共享数据

    内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...

  8. 【Android】安卓四大组件之内容提供者

    [Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...

  9. 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)

    1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...

随机推荐

  1. Linux中make, make install命令分别是什么

    用于linux源码安装软件,一般下载源码包得到文件:xxxx.tgz====================================1.解包软件 tar zxf xxxx.tgz======= ...

  2. HttpURLConnection连接超时问题

    1.问题描述 这几天测试重构后的下载框架,发现在下载过程中如果网络中断或网络较差,个别应用的下载就会阻塞卡住,一直卡在 “正在下载 xx%”.   2.问题排查和定位 思考:网络差不应该报网络异常的错 ...

  3. Hibernate cascade级联

    cascade: 级联: 是对象的连锁操作 级联保存(一对多): 级联保存: 当保存双向关系的一方时,默认会报告错误,此时应该在customr中设置级联保存,即操作一个对象时,通过操作其他关联对象 如 ...

  4. 在ubuntu中如何向U盘复制粘贴文件 Read-only file system

    1.  重新挂载被操作分区的读写权限,如U盘 $ sudo mount -o remount,rw /media/lenmom/00093FA700017B96 #U盘挂载目录,如果是系统中的其他盘, ...

  5. Samba 简介

    SMB 代表的是服务器消息块 (Server Message Block),它是用于在 Windows 上共享文件的协议的原始名称. CIFS 代表公共 Internet 文件系统 (Common I ...

  6. UVA-755-排序

    奇怪,我怎么还有一个排序题目没过 题意如下: 公司喜欢有难忘的电话号码,一个让电话号码变得难忘的方式是有一个拼读起来难忘的单词,比如,你可以呼叫University of Waterloo通过拨打难忘 ...

  7. bootstrap3中select2的默认值和下拉框的禁用

    最近做项目用到了select2插件,需求中需要给下拉框设置默认值之后,禁用下拉框,我开始的写法是这样的 <script type="text/javascript"> ...

  8. Mysql 开启Federated引擎以及使用

    FEDERATED是其中一个专门针对远程数据库的实现.但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中通过这个引擎可以实现类似Oracle 下DBLINK的远程 ...

  9. spring boot 自定义异常

    1.创建一个异常: public class LdapQueryException extends Exception { private Integer code; private String m ...

  10. jmeter java请求:java.lang.VerifyError: Cannot inherit from final class

    被这个问题block了一天,应该是包冲突的.通过对包删减排查,结果发现是netty-all-xxx.Final.jar包的问题 应该是jmeter版本和netty版本的冲突吧,换成jmeter 3.1 ...