自定义提供者

 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中长按有上下文菜单选择增删改访问数据库操作数据库

posted on 2015-09-19 21:52  毕哥  阅读(241)  评论(0编辑  收藏  举报