ContentProvider-------------自定义的内容提供者 然后去访问
自定义提供者
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-------------自定义的内容提供者 然后去访问的更多相关文章
- ContentProvider ContentResolver ContentObserver 内容:提供、访问、监听
内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORI ...
- android之内容提供者解析
该系统有两个应用,比较繁琐.但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦.先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作. 我们先看内容提供者所在的应用,代码 ...
- Android应用开发基础之九:内容提供者(ContentProvider)
内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用:就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代 ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
- android100 自定义内容提供者
#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私 ...
- android 学习随笔二十一(内容提供者 )
一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查 ...
- 内容提供者(Content Provider)——跨程序共享数据
内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方 ...
- 【Android】安卓四大组件之内容提供者
[Android]安卓四大组件之内容提供者 1.关于内容提供者 1.1 什么是内容提供者 内容提供者就是contentProvider,作用有如下: 给多个应用提供数据 类似一个接口 可以和多个应用分 ...
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...
随机推荐
- 比较java枚举成员使用equal还是==
问题 我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类,当去比较两个枚举的时候,总是使用equals()方法,例如: public useEnums(SomeEnum a) { if ...
- 模型融合策略voting、averaging、stacking
原文:https://zhuanlan.zhihu.com/p/25836678 1.voting 对于分类问题,采用多个基础模型,采用投票策略选择投票最多的为最终的分类. 2.averaging 对 ...
- C# Atomic<T> Generic
using System; using System.Threading; /// <summary> /// Provides lock-free atomic read/write u ...
- OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo)
OPatch failed with error code 73(OracleHomeInventory gets null oracleHomeInfo) 1.问题描述 [oracle@dou_ra ...
- Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别
Hive架构 1)用户接口: CLI(hive shell):命令行工具:启动方式:hive 或者 hive --service cli ThriftServer:通过Thrift对外提供服务,默认端 ...
- [Python] 分段线性插值
利用线性函数做插值 每一段的线性函数: #Program 0.6 Linear Interploation import numpy as np import matplotlib.pyplot as ...
- pdb调试工具
调试--pdb pdb是基于命令行的调试工具,非常类似gnu的gdb(调试c/c++). 命令 简写命令 作用 break b 设置断点 continue c 继续执行程序 list l 查看当前行的 ...
- node 删除文件 和文件夹
删除文件 var fs = require('fs'); fs.unlink(path,callback); 删除文件夹 deleteFolder(path); function deleteFold ...
- http chunked
http chunked传输:将信息分段传输 好处: 不用指定content-length字段(总的要传输文件信息的长度),即可以将一整段信息分为若干段分别发送,最后发送chunked长度为0的信息表 ...
- Spoon新建repository的时候
Spoon新建repository的时候,下面选项选择‘否’,不要选择‘是’,不然可能会出错.