自定义提供者

 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. 常用模块:hashlib,subprocess,configparser。

    一  hashlib模块 那么我们前面学习数据类型的时候,也讲了hash,可变类型不可hash:不可变类型可hash. 我们知道hash是一种算法,接收传入的内容经过运算之后得到一个hash值,我们可 ...

  2. python之路之函数03

    一 首先我们学到函数的嵌套调用与定义:1 函数嵌套 # def f1(): # print(f1)#我们这里如果输入f1那么输出的则是f1这个变量(函数)所在的地址.如果输入一个字符的话那么就直接输出 ...

  3. 查看linux服务器CPU数量

    首先,要区分两个概念:物理CPU和逻辑CPU. 物理CPU就是服务器上实际安装的CPU.但是一个物理CPU可以有多个核.例如,一个 i5 760 是双核,而一个 i5 2250 是四核.如果开启了In ...

  4. url 路由系统

    Django的路由系统 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 我们就是以这种方式告诉Django,遇到哪个URL的时 ...

  5. 编码风格和PEP8规范

    编码风格 错误认知 这很浪费时间 我是个艺术家 所有人都能穿的鞋不会合任何人的脚 我善长制定编码规范 正确认知 促进团队合作 减少bug处理 提高可读性,降低维护成本 有助于代码审查 养成习惯,有助于 ...

  6. Where is virtualenvwrapper.sh after pip install?

      I'm trying to setup virtualenvwrapper on OSX, and all the instructions and tutorials I've found te ...

  7. [Flutter] Windows平台Flutter开发环境搭建(Andorid Studio)

    前两天网友在群里说起了Flutter,就了解了一下,在手机上跑了它的demo,直接就被打动了. 虽然网上有很多教程,但真正开始的时候,还是会碰到很多坑.下面详细的讲解Flutter + Android ...

  8. C基本语句和运算符

    1,逗号运算符

  9. attack source code

    不废话,直接上代码, 先看截图use pictures;

  10. 写下thinkphp5和thinkphp3.2的不同

    只列出一些自己的直观感受 1 引入了命令行,估计来源是laravel,前阵子刚练手完laravel5.0的系统, 感觉thinkphp5的命令行和laravel的很像 2 引入了路由,来源估计也是la ...