上次我们为eatwhat添加了了删除功能和dialog对话框的介绍,今天我们来使用SQLite进行本地数据存储。
首先,我们定义一个SQL辅助类ShopInfoOpenHelper继承SQLiteOpenHelper。
public class ShopInfoOpenHelper extends SQLiteOpenHelper { public ShopInfoOpenHelper(Context context, String name, CursorFactory factory, int version, DatabaseErrorHandler errorHandler) { super(context, name, factory, version, errorHandler); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }
在构造方法ShopInfoOpenHelper中配置上下文环境、数据库名称、版本号游标工厂默认设置null。
public ShopInfoOpenHelper(Context context) { super(context, "shop_info.db", null, 1); }
在OnCreate中创建表shopinfo:主键_id,字段shopName。
public void onCreate(SQLiteDatabase db) { db.execSQL("create table shopinfo(_id integer primary key autoincrement,shopName char(20))"); }
MainActivity中声明数据库和辅助类。在init()方法中声明createOrOpenDataBase()方法。
// 数据库创建 private SQLiteDatabase db; // openHelper辅助类 private ShopInfoOpenHelper mOpenHelper;
该方法体内初始化辅助类openhelper,创建或者打开数据库:
private void createOrOpenDataBase() { mOpenHelper = new ShopInfoOpenHelper(MainActivity.this); //如果数据库不存在 则创建可读写的数据库 ,如果创建了 则直接打开 db = mOpenHelper.getWritableDatabase(); }
声明方法addLocalData(Shop shop):
private void addLocalData(Shop shop) { //存储的机制,只能存储基本类型的数据,像string、int之类。 ContentValues values = new ContentValues(); values.put("shopName",shop.getName());
//shopinfo中插入数据 db.insert("shopinfo", null, values); }
在添加按钮的逻辑中调用此方法:
// List shop添加店名 Shop shop = new Shop(addName); // 添加新实例化的shop对象 shopList.add(shop); // 刷新listview shopAdapter.notifyDataSetChanged(); // 添加到本地数据 addLocalData(shop);
测试结果,真机测试需ROOT后通过rootexplorer等软件进行查找,路径:data/data/包名/databases/数据库名称/表名