自定义提供者

 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. Docker集群管理(一)—— 基础docker+swarm+shipyard

    目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...

  2. django路由初识

    静态文件配置 1.项目下面新建一个文件夹static settings.py中最后添加 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static ...

  3. 使用SolrNet访问Solr-5.5.0

    由于今年年初刚发布的Solr-5.5.0,网上所能找到的资料少之又少,所以只能靠自己一点点摸索. 从某Hub上下载了SolrNet源码,按照教程提交文档或者查询均失败,无奈只得跟断点一点点差怎么回事. ...

  4. 开发组件:Systemd

    Systemd 入门教程:命令篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

  5. express有中间件的增删改查

    var express = require('express');引入express框架 var router = express.Router();引入router路由级中间件 var data = ...

  6. 常用数据库2 sqlite及SQL注入

    知识内容: 1.sqlite数据库介绍 2.sqlite数据库操作 3.SQL注入 一.sqlite数据库介绍 1.sqlite数据库 sqlite数据库:轻量级的数据库,一般开发中使用sqlite数 ...

  7. 视频地址blog加密

    /* JS部分 没处理兼容什么的 */ var id='<?php echo $_GET['id'];?>'; var video = document.getElementById(&q ...

  8. springMVC之Interceptor拦截器

    转自:https://blog.csdn.net/qq_25673113/article/details/79153547 Interceptor拦截器用于拦截Controller层接口,表现形式有点 ...

  9. as3 air 保存文本内容的换行

    private function newData() { var str:String="<root>"; for(var i in charCode_arr) { s ...

  10. OpenSL ES 查询设备支持的SL Profiles

    opensl es 提供了三种类型:分别是 SL_PROFILES_PHONE(手机):SL_PROFILES_MUSIC(音乐); SL_PROFILES_GAME (游戏). 如果你使用的手机的开 ...