自定义提供者

 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. EC20 MODULE serial com log in passwd

    ec20 module would print debug info via debug uart, and you can log in by user root, the passwd is qu ...

  2. 在ie6下的png图片的兼容问题

    png图片在ie6下是这样的: 正确样式: 这样解决: html代码: <body> <div class="gys"></div> </ ...

  3. Web API源码剖析之HttpServer

    Web API源码剖析之HttpServer 上一节我们讲述全局配置.本节将讲述全局配置的DefaultServer,它是一个HttpServer类型. 主要作用就是接受每一次请求,然后分发给消息处理 ...

  4. border-radius bug 收集

    border-radius我相信对于老一辈的前端们有着特殊的感情,在经历了没有圆角的蛮荒时代,到如今 CSS3 遍地开花,我们还是很幸福的. 然而即使到了三星大脸流行时代,border-radius在 ...

  5. Spring MVC 学习笔记3 - 利用Default Annotation 模式获取请求,使Controller与View对应,并传值。

    1. WEB-INF/web.xml 这里定义了获取请求后,执行的第一步.抓取请求. <servlet> <servlet-name>appServlet</servle ...

  6. WDA-FPM-1-Roadmap(GAF)

    转载:https://www.cnblogs.com/sapSB/p/10077564.html 首先要有个简单的认识: 1.FPM支持的几种UI配置界面接口: Object Instance Flo ...

  7. javascript时间日期操作

    Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();   ...

  8. vue基础——vue介绍

    声明式渲染——文本插值: 数据和dom已经进行了关联,所有东西都是响应式的 index.html <div id="app0"> {{message}} </di ...

  9. eclipse中maven多模块项目的创建、提交和检出

    1.创建父项目:maven项目.创建完成后删除src目录:删除项目属性java builder中的src目录. 2.在父项目中创建maven module子项目. 3.修改pom文件,添加依赖,修改g ...

  10. UGUI RectTransform

    RectTransform解析 当 Anchor 在同一点时,显示的是物体的座标与大小Pos X.Pos Y.Width.Height ,当 Anchor 不在同一点时(此时会形成矩形),显示的会是 ...