ContentProvider-------------自定义的内容提供者 然后去访问

自定义提供者

 1 import android.content.Context;
 2 import android.database.DatabaseErrorHandler;
 3 import android.database.sqlite.SQLiteDatabase;
 4 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6
 7 public class DBHelper extends SQLiteOpenHelper {
 8
 9     public DBHelper(Context context) {
10         super(context, "users.db", null, 1);
11     }
12
13     @Override
14     public void onCreate(SQLiteDatabase db) {
15         // TODO 初始化数据库
16         db.execSQL("create table t_user(_id integer primary key,uname,upass,money)");
17
18         db.execSQL("create table t_order(_id integer primary key,user_id,price,productname)");
19
20         db.execSQL("insert into t_user(uname,upass,money) values(‘lisi‘,‘123‘,200)");
21
22         db.execSQL("insert into t_user(uname,upass,money) values(‘zhangsi‘,‘1234‘,2000)");
23     }
24
25     @Override
26     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
27         // TODO 数据库升级时执行该方法
28         if(newVersion>oldVersion)
29         {
30             db.execSQL("drop table if exists t_user");
31             db.execSQL("drop table if exists t_order");
32             //并且重新初始化数据库也可以不重新加载
33             onCreate(db);
34         }
35
36     }
37
38
39
40 }

DBHelper

  1 import com.qianfeng.gp08_day25_contentprovider1.tool.DBHelper;
  2
  3 import android.content.ContentProvider;
  4 import android.content.ContentUris;
  5 import android.content.ContentValues;
  6 import android.content.UriMatcher;
  7 import android.database.Cursor;
  8 import android.database.sqlite.SQLiteDatabase;
  9 import android.net.Uri;
 10
 11 public class UserContentProvider extends ContentProvider {
 12
 13     //声明该ContentProvider的唯一标识--通常使用包名+数据库名--必须小写
 14     public static final String AUTHORITY ="com.qianfeng.gp08_day25_contentprovider1.users";
 15
 16     //为该组件中可以被外界访问的数据库中的资源定义Code标识
 17     public static final int CODE_USER = 1;
 18     public static final int CODE_ORDER = 8;
 19
 20     //定义访问资源的Uri的匹配器对象--使用该类生成被访问的资源的Uri
 21     private static UriMatcher uriMatcher;
 22
 23     static{
 24         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
 25         //content://com.qianfeng.gp08_day25_contentprovider1.users/user
 26         uriMatcher.addURI(AUTHORITY, "user", CODE_USER);
 27
 28         //content://com.qianfeng.gp08_day25_contentprovider1.users/order
 29         uriMatcher.addURI(AUTHORITY, "order", CODE_ORDER);
 30     }
 31
 32     private DBHelper dbHelper;
 33
 34     @Override
 35     public boolean onCreate() {
 36         // TODO 初始化 数据库操作的工具类
 37         dbHelper = new DBHelper(getContext());
 38         return false;
 39     }
 40
 41     @Override
 42     public Cursor query(Uri uri, String[] projection, String selection,
 43             String[] selectionArgs, String sortOrder) {
 44         SQLiteDatabase  db = dbHelper.getReadableDatabase();
 45         Cursor cursor = null;
 46
 47         int code = uriMatcher.match(uri);
 48
 49         switch(code)
 50         {
 51         case CODE_USER:
 52             cursor = db.query("t_user", projection, selection, selectionArgs, null, null, sortOrder);
 53             break;
 54         case CODE_ORDER:
 55             cursor = db.query("t_order", projection, selection, selectionArgs, null, null, sortOrder);
 56             break;
 57         }
 58         return cursor;
 59     }
 60
 61
 62     @Override
 63     public Uri insert(Uri uri, ContentValues values) {
 64         // TODO 向数据库中插入数据
 65         SQLiteDatabase db =dbHelper.getWritableDatabase();
 66         if(uriMatcher.match(uri)==CODE_USER)
 67         {
 68             long id = db.insert("t_user", null, values);
 69
 70             //返回新插入的记录的 Uri
 71             //content://com.qianfeng.gp08_day25_contentprovider1.users/user/6
 72             return ContentUris.withAppendedId(uri, id);
 73         }
 74         return null;
 75     }
 76
 77     @Override
 78     public int delete(Uri uri, String selection, String[] selectionArgs) {
 79         // TODO 删除数据库中的数据
 80         SQLiteDatabase db = dbHelper.getWritableDatabase();
 81         int num = 0;
 82         if(uriMatcher.match(uri)==CODE_USER)
 83         {
 84             num = db.delete("t_user", selection, selectionArgs);
 85         }
 86         return num;
 87     }
 88
 89     @Override
 90     public int update(Uri uri, ContentValues values, String selection,
 91             String[] selectionArgs) {
 92         // TODO 修改数据库中的数据
 93         SQLiteDatabase db = dbHelper.getWritableDatabase();
 94         if(uriMatcher.match(uri)==CODE_USER)
 95         {
 96             return db.update("t_user", values, selection, selectionArgs);
 97         }
 98         return 0;
 99     }
100
101
102     @Override
103     public String getType(Uri uri) {
104         // TODO Auto-generated method stub
105         return null;
106     }
107
108 }

usercontentprovider

查询

  1 package com.qianfeng.gp08_day25_contentresolver3;
  2
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7
  8 import entity.Person;
  9 import android.net.Uri;
 10 import android.os.Bundle;
 11 import android.app.Activity;
 12 import android.app.AlertDialog;
 13 import android.content.ContentResolver;
 14 import android.content.ContentUris;
 15 import android.content.ContentValues;
 16 import android.content.DialogInterface;
 17 import android.content.DialogInterface.OnClickListener;
 18 import android.database.Cursor;
 19 import android.view.ContextMenu;
 20 import android.view.Menu;
 21 import android.view.MenuItem;
 22 import android.view.View;
 23 import android.view.ContextMenu.ContextMenuInfo;
 24 import android.view.View.OnCreateContextMenuListener;
 25 import android.widget.AdapterView.AdapterContextMenuInfo;
 26 import android.widget.ArrayAdapter;
 27 import android.widget.EditText;
 28 import android.widget.ListView;
 29 import android.widget.Toast;
 30
 31 /**
 32  * 访问自定义的ContentProvider---UserContentProvider
 33  *
 34  * @author qq
 35  *
 36  */
 37 public class MainActivity extends Activity {
 38
 39     private ListView listView;
 40     private List<Person> datas;
 41     private ArrayAdapter adapter;
 42
 43     private Uri userUri = Uri
 44             .parse("content://com.qianfeng.gp08_day25_contentprovider1.users/user");
 45     private String[] columns = { "_id", "uname", "upass", "money" };
 46     private int current;
 47     private boolean isAdd;
 48     private EditText edit_name, edit_pass, edit_money;
 49     private View view;
 50     private AlertDialog editDialog, deleteDialog;
 51
 52     @Override
 53     protected void onCreate(Bundle savedInstanceState) {
 54         super.onCreate(savedInstanceState);
 55         setContentView(R.layout.activity_main);
 56
 57         listView = (ListView) findViewById(R.id.listView);
 58         edit_name = (EditText) findViewById(R.id.edit_name);
 59         edit_pass = (EditText) findViewById(R.id.edit_pass);
 60         edit_money = (EditText) findViewById(R.id.edit_money);
 61         datas = new ArrayList<Person>();
 62         adapter = new ArrayAdapter<Person>(this,
 63                 android.R.layout.simple_list_item_1, datas);
 64
 65         listView.setAdapter(adapter);
 66         registerForContextMenu(listView);
 67
 68         loadData();
 69         initDialog();
 70     }
 71
 72     private void loadData() {
 73
 74         Cursor cursor = getContentResolver().query(userUri, columns, null,
 75                 null, null);
 76
 77         while (cursor.moveToNext()) {
 78             long id = cursor.getLong(0);
 79             String name = cursor.getString(1);
 80             String pass = cursor.getString(2);
 81             int money = cursor.getInt(3);
 82             Person person = new Person();
 83             person.set_id(id);
 84             person.setMoney(money);
 85             person.setUname(name);
 86             datas.add(person);
 87         }
 88         cursor.close();//-------------------------
 89         adapter.notifyDataSetChanged();
 90     }
 91
 92     @Override
 93     public void onCreateContextMenu(ContextMenu menu, View v,
 94             ContextMenuInfo menuInfo) {
 95         getMenuInflater().inflate(R.menu.item, menu);
 96         current = ((AdapterContextMenuInfo) menuInfo).position;
 97         super.onCreateContextMenu(menu, v, menuInfo);
 98     }
 99
100     @Override
101     public boolean onContextItemSelected(MenuItem item) {
102         switch (item.getItemId()) {
103         case R.id.action_update:
104             isAdd = false;
105             edit_name.setText(datas.get(current).getUname());
106             edit_pass.setText(datas.get(current).getPass());
107             edit_money.setText("" + datas.get(current).getMoney());
108             editDialog.show();
109             break;
110         case R.id.action_delete:
111             deleteDialog.show();
112             break;
113         case R.id.action_add:
114             isAdd = true;
115             edit_name.setText("");
116             edit_pass.setText("");
117             edit_money.setText("");
118             editDialog.show();
119             break;
120         }
121         return super.onContextItemSelected(item);
122     }
123
124     private void showDatas() {
125         datas.clear();
126         ContentResolver resolver = getContentResolver();
127         // 先从联系人表中查询所有人的信息
128         Cursor cursor = resolver.query(userUri, columns, null, null, null);
129         while (cursor.moveToNext()) {
130             long id = cursor.getLong(0);
131             String name = cursor.getString(1);
132             String pass = cursor.getString(2);
133             int money = cursor.getInt(3);
134             Person person = new Person();
135             person.set_id(id);
136             person.setMoney(money);
137             person.setUname(name);
138             person.setPass(pass);
139             datas.add(person);
140         }
141         cursor.close();//----------------------
142         adapter.notifyDataSetChanged();
143     }
144
145     public void initDialog() {
146         view = getLayoutInflater().inflate(R.layout.dialog, null);
147         edit_name = (EditText) view.findViewById(R.id.edit_name);
148         edit_pass = (EditText) view.findViewById(R.id.edit_pass);
149         edit_money = (EditText) view.findViewById(R.id.edit_money);
150
151         editDialog = new AlertDialog.Builder(this).setTitle("联系人添加对话框")
152                 .setIcon(android.R.drawable.ic_menu_add).setView(view)
153                 .setPositiveButton("确定", new OnClickListener() {
154                     @Override
155                     public void onClick(DialogInterface dialog, int which) {
156                         String name = edit_name.getText().toString();
157                         String pass = edit_pass.getText().toString();
158                         String money = edit_money.getText().toString();
159
160                         ContentValues value = new ContentValues();
161
162                         if (isAdd) {
163                             if(!name.equals(""))
164                             {
165                             value.put("uname", name);
166                             value.put("upass", pass);
167                             value.put("money", money);
168                             getContentResolver().insert(userUri, value);
169                             }
170                             else Toast.makeText(MainActivity.this, "名字不能为空", Toast.LENGTH_SHORT).show();
171                         } else {
172                             value.put("uname", name);
173                             value.put("upass", pass);
174                             value.put("money", money);
175                             long id = datas.get(current).get_id();
176                             getContentResolver().update(userUri, value, "_id="+id, null);
177                         }
178                         showDatas();
179                     }
180                 }).setNegativeButton("取消", null).setCancelable(false).create();
181
182         deleteDialog = new AlertDialog.Builder(this).setTitle("提示")
183                 .setMessage("确实要删除吗?")
184                 .setIcon(android.R.drawable.ic_menu_delete)
185                 .setPositiveButton("确定", new OnClickListener() {
186
187                     @Override
188                     public void onClick(DialogInterface dialog, int which) {
189                         long id = datas.get(current).get_id();
190                         getContentResolver().delete(userUri, "_id=" + id, null);
191
192                         showDatas();
193                     }
194                 }).setNegativeButton("取消", null).setCancelable(false).create();
195     }
196
197 }

MainActivity

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

时间: 2024-10-16 01:45:43

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

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

内容提供 public class PersonContentProvider extends ContentProvider{ private static final String AUTHORITY = "com.itheima28.sqlitedemo.providers.PersonContentProvider"; private static final int PRESON_INSERT_CODE = 0; // 操作person表添加的操作的uri匹配码 UriMat

android之内容提供者解析

该系统有两个应用,比较繁琐.但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦.先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作. 我们先看内容提供者所在的应用,代码结构: activity代码: [java] view plaincopy package cn.com.contentProvider; import android.app.Activity; import android.os.Bundle; import android.widget.Tex

android100 自定义内容提供者

#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 *短信联系人都是在数据库里面.mmssms是短信数据库, *短信数据库有短信数据库的内容提供者,联系人数据库有联系人数据库的内容提供者.拿到对应数据库的内容提供者就能够访问对应的数据库数据. ###短信数据库 * sms表 * body

Android开发之内容提供者ContentProvider

2 内容提供者ContentProvider 一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据.而使用ContentProvider共享数据的好处是统一了数据

11.内容提供者

ContentProvider 四大组件之一 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 应用的数据库是不允许其他应用访问的,内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法 @Override publicUri insert(Uri uri,ContentValues values){ db.insert("person",n

Android应用开发基础之九:内容提供者

内容提供者 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法 @Override public Uri insert(Uri uri, ContentValues values) { db.insert("person", null, values); return uri; } 在清单文件中定义内容提供者的标签,注意必须要有autho

[安卓应用开发] 06.内容提供者

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

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

内容提供者 Content Provider 应用的数据库是不允许其他应用访问的 内容提供者的作用就是让别的应用访问到你的数据库 自定义内容提供者,继承ContentProvider类,重写增删改查方法, 如果想要访问ContentProvider中的共享的数据,就一定要借助ContentResolver类 进行CRUD操作 insert() 添加数据 update() 更新数据 delete() 删除数据 query() 查询数据 getContentResolver().query(uri,

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

一.内容提供者* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的私有数据* 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法 @Override public Uri insert(Uri uri, ContentValues values) { db.insert("person", null, values); return uri; }* 在清单文件中定义内容提供者的标签,注意必须