1.Android的四大组件:
(1)Activity 用户交互的UI界面
(2)Service 后台运行的服务
(3)BroadcastReceiver 广播接收者
(4)ContentProvider 内容提供者
2. ContentProvider 内容提供者
用途:把应用程序私有的数据暴露给别的应用程序。
3.下面通过一个银行数据库创建和增删改查的实现案例说明ContentProvider的使用:
(1)首先我们这里要用到数据库,首先我们必须先扩展一个抽象类SQLiteOpenHelper(SQLiteOpenHelper类似于File),我们定义一个子类去继承SQLiteOpenHelper,实现其抽象方法:
自定义的子类为MyDBOpenHelper:
1 package com.himi.db; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 7 public class MyDBOpenHelper extends SQLiteOpenHelper { 8 9 public MyDBOpenHelper(Context context) { 10 super(context, "bank.db", null, 1); 11 } 12 13 //数据库第一被创建调用的方法,适合做数据库表结构的初始化 14 @Override 15 public void onCreate(SQLiteDatabase db) { 16 db.execSQL("create table account (_id integer primary key autoincrement, name varchar(20), money varchar(2))"); 17 18 } 19 20 //数据库更新的时候,调用的方法 21 @Override 22 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 23 24 } 25 26 }
(2)同时编写一个实现数据库增删改查的工具类,如下利用Google的API,如下:
1 package com.himi.db.dao; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.content.ContentValues; 9 import android.content.Context; 10 import android.database.Cursor; 11 import android.database.sqlite.SQLiteDatabase; 12 13 import com.himi.db.MyDBOpenHelper; 14 15 /** 16 * 17 *银行数据库的data access object 18 * 19 */ 20 public class BankDBDao { 21 private MyDBOpenHelper helper; 22 23 public BankDBDao(Context context) { 24 helper = new MyDBOpenHelper(context); 25 } 26 27 /** 28 * 添加一条用户信息 29 * @param name 姓名 30 * @param money 钱 31 * @return 代表添加在数据库的行号id, 如果返回-1,代表添加失败(用户已经存在) 32 */ 33 public long add(String name, float money) { 34 if(isUserExist(name)) { 35 return -1; 36 } 37 SQLiteDatabase db = helper.getWritableDatabase(); 38 ContentValues values = new ContentValues(); 39 values.put("name", name); 40 values.put("money", money); 41 long rowID = db.insert("account", null, values); 42 db.close(); 43 return rowID; 44 } 45 46 47 48 /** 49 * 删除一条数据库记录 50 * @param name 用户姓名 51 * @return true 删除成功 false 删除失败 52 */ 53 public boolean delete(String name) { 54 SQLiteDatabase db = helper.getWritableDatabase(); 55 int result = db.delete("account", "name=?", new String[] {name}); 56 57 db.close(); 58 if(result >0) { 59 return true; 60 }else { 61 return false; 62 } 63 64 } 65 66 /** 67 * 修改用户的的账户信息 68 * @param name 要修改的储户的姓名 69 * @param money 新的账户余额 70 * @return true 修改成功 false 修改失败 71 */ 72 public boolean update(String name, float money) { 73 74 75 SQLiteDatabase db = helper.getWritableDatabase(); 76 ContentValues values = new ContentValues(); 77 values.put("name", name); 78 values.put("money", money); 79 int result = db.update("account", values, "name=?", new String[] {name}); 80 db.close(); 81 if(result >0) { 82 return true; 83 }else { 84 return false; 85 } 86 } 87 88 /** 89 * 查询某一个用户信息账户余额 90 * @param name 要查询的用户的姓名 91 */ 92 public float getUserMoney(String name) { 93 float money = 0; 94 SQLiteDatabase db = helper.getReadableDatabase(); 95 Cursor cursor = db.query("account", new String[] {"money"}, "name=?", new String[] {name}, null, null, null); 96 if(cursor.moveToNext()) { //游标可以移动下一个,说明有数据查询到 97 money = cursor.getFloat(0); 98 } 99 cursor.close(); 100 db.close(); 101 return money; 102 } 103 104 105 public List<Map<String, Object>> findAllUser() { 106 List<Map<String, Object>> allUsers = new ArrayList<Map<String, Object>>(); 107 SQLiteDatabase db = helper.getReadableDatabase(); 108 Cursor cursor = db.query("account", new String[] { "_id", "name", 109 "money" }, null, null, null, null, null); 110 while (cursor.moveToNext()) { 111 Map<String, Object> user = new HashMap<String, Object>(); 112 user.put("_id", cursor.getInt(0)); 113 user.put("name", cursor.getString(1)); 114 user.put("money", cursor.getFloat(2)); 115 allUsers.add(user); 116 } 117 118 cursor.close(); 119 db.close(); 120 121 return allUsers; 122 } 123 124 125 126 /** 127 * 查询一个用户是否存在 128 * @param name 要查询用户的名字 129 * @return true 存在 false 不存在 130 */ 131 132 public boolean isUserExist(String name) { 133 boolean result = false; 134 SQLiteDatabase db = helper.getReadableDatabase(); 135 Cursor cursor = db.query("account", new String[] {"money"}, "name=?", new String[] {name}, null, null, null); 136 if(cursor.moveToNext()) { //游标可以移动下一个,说明有数据查询到 137 result = true; 138 } 139 cursor.close(); 140 db.close(); 141 return result; 142 } 143 }
(3)最后的MainActivity,为如下:
1 package com.himi.db; 2 3 4 import java.util.Random; 5 6 import com.himi.db.dao.BankDBDao; 7 8 import android.app.Activity; 9 import android.os.Bundle; 10 11 public class MainActivity extends Activity { 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 BankDBDao dao = new BankDBDao(this); 18 Random random = new Random(); 19 20 for (int i = 0; i < 20; i++) { 21 dao.add("张" + i, random.nextFloat() + random.nextInt(500)); 22 } 23 } 24 25 }
运行效果如下:
时间: 2024-10-14 01:01:07