Android数据存储方式之:ContentProvider

ContentProvider是Android的四大组件之一,可见其重要性。我们使用到ContentProvider时,也要同Activity等其它组件一样,在AndroidManifest.xml中注册对应的组件才能使用。为什么会用ContentProvider来作为数据存储方式之一呢?

ContentProvider在android中的作用是对外共享数据(应用之间数据共享),可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。与其它数据共享方式相比:如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。使用ContentProvider对外共享数据的好处是统一了数据的访问方式。

的Content provider,比如

今天用单元测试的方式简单介绍ContentProvider的使用:

——————————-使用ContentProvider共享数据,一般用到Sqlite数据库———————————————————–

public class DBHelpTool {private static DatabaseHelper dbHelper;private static SQLiteDatabase db;/**数据库名*/private static final String DB_NAME = "kawa.db";/**数据库版本*/private static final int DB_VERSION = 1;private final Context mContent;public DBHelpTool(Context mContent) {this.mContent = mContent;}/**定义一个抽象类,用于数据库的创建和版本的管理 */private static class DatabaseHelper extends SQLiteOpenHelper {DatabaseHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {/**创建一个老师teacher表,三个字段分别是_id(自增长主键),name和age*/String sql = "create table if not exists teacher (_id integer primary key autoincrement, name text,age integer)";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 数据库升级操作}}/**打开数据库操作*/public DBHelpTool open() throws SQLException {dbHelper = new DatabaseHelper(mContent);db = dbHelper.getWritableDatabase();return this;}/**关闭数据库操作*/public void closeclose() {db.close();dbHelper.close();}/*** 插入数据* 参数:tableName 表名* values 要插入的列对应值*/public long insert(String tableName, ContentValues values) {return db.insert(tableName, null, values);}/*** 删除数据* 参数:tableName 表名* deleteCondition 删除的条件* deleteArgs 如果deleteCondition中有“=?”号,,将用此数组中的值替换*/public int delete(String tableName, String deleteCondition, String[] deleteArgs) {return db.delete(tableName, deleteCondition, deleteArgs);}/*** 修改数据* 参数:tableName 表名* initialValues 要更新的列* selection 更新的条件* selectArgs 如果selection中有“=?”号,将用此数组中的值替换*/public int update(String tableName, ContentValues initialValues, String selection, String[] selectArgs) {int returnValue = db.update(tableName, initialValues, selection, selectArgs);return returnValue;}/*** 查询相应条件的所有数据* 参数:tableName 表名* columns 返回的列* selection 查询条件* selectArgs 如果selection中有“?”号,将用此数组中的值替换 */public Cursor findList(String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {return db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy);}

———————————-对应的数据表teacher实体类————————————————

public class Teacher implements Serializable {private static final long serialVersionUID = 1L;private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + id;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Teacher other = (Teacher) obj;if (age != other.age)return false;if (id != other.id)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}}

————————简单的常量类————————————————-

既有美妙的风景,也会有称不上景只有风的地方。

Android数据存储方式之:ContentProvider

相关文章:

你感兴趣的文章:

标签云: