数据存储和界面展现

Android基础-----数据存储&界面展现


1. Android中创建数据库(**)

  1. SQLiteOpenHelper
  2. 自定义一个MySQLiteOpenHelper 继承SQLiteOpenHelper
  3. 覆写抽象方法
    1. onCreate(){xxx}
    2. onUpgrade()
  4. new MySQLiteOpenHelper(xxxx)
  5. helper.getWriteableDatabase()
  6. 创建的数据库文件位置:/data/data/包名/databases/my_user.db

两种数据库获取方式的区别 1. openHelper.getReadableDatabase();和openHelper.getWritableDatabase();的区别 1. 都可读可写,没有任何差异 2. 只有当磁盘满的情况下,前者返回的数据库只读,后者报异常.

2. Android下数据库第一种方式增删改查(**)

纯sql的方式 1. 添加 1. 创建一个MySQLiteOpenHelper对象 openHelper 2. 通过openHelper对象的getWritableDatabase方法获取到SQLiteDatabase对象db 3. db.execSQL(sql,args); 2. 删除 1. 创建一个MySQLiteOpenHelper对象 openHelper 2. 通过openHelper对象的getWritableDatabase方法获取到SQLiteDatabase对象db 3. db.execSQL(sql,args); 3. 修改 1. 创建一个MySQLiteOpenHelper对象 openHelper 2. 通过openHelper对象的getWritableDatabase方法获取到SQLiteDatabase对象db 3. db.execSQL(sql,args); 4. 查询 String sql = "select cname,cage,c_phone from tuser where cage>?"; Cursor cursor = database.rawQuery(sql, new String[]{"30"}); while(cursor.moveToNext()){ String name = cursor.getString(0); int age = cursor.getInt(1); String phone = cursor.getString(2); users.add(new User(name, age, phone)); } cursor.close(); database.close();

3. Android下数据库第二种方式增删改查(***)

  1. 添加
    1. long id = db.insert(args);//uid
  2. 删除
    1. long deleted = db.delete(args);//删除的数据条数
  3. 修改
    1. long updated = db.update(args);//修改成功的条目数
  4. 查询
    1. Cursor cursor = db.query(args);

4. 数据库的事务(*)

  1. 开启事务
    1. db.beginTransaction();
  2. 扣除张三500元

  3. 给李四添加500元

  4. 将事务提交
    1. db.setTransactionSuccessful();
  5. 结束事务

    1. db.endTransaction();
  6. 使用事务可以提高批处理效率

5. ListView入门(***)

  1. MVC M:Model(数据) V:View C:Controller(Servlet/Adapter)
  2. 在布局中xxx.xml声明ListView
  3. 初始化ListView
  4. 给ListView设置一个适配器
    1. 自定义一个MyAdapter 继承BaseAdapter
    2. int getCount();
    3. View getView(int postion,args);
  5. 数据
    1. 模拟一些数据

6. ListView优化(****)

1.复用convertView

7. 复杂ListView界面的显示(案例-通信录)(****)

  1. 需求:
    1. 访问assets目录中的my_user.db
      1. 获取assertManager:Context.getAsserts();
      2. InputStream is = open("my_user.db");
      3. 拷贝db
      4. /data/data/包名/databases/my_user.db
      5. SQLitedatabase db = Context.openOrCreateDatabase("my_user.db");
    2. 将db中的数据保存在集合中
      1. Cursor cursor = db.rawQuery(args);
      2. 遍历Cursor获取
    3. 将集合中的数据显示在ListView上面
      1. activity_main.xml 中声明ListView
      2. MainActivity中初始化lv
      3. lv.setAdapter(new MyAdapter());
      4. 自定义MyAdapter继承BaseAdapter
      5. int getCount()
      6. View getView(int position,View convertView,ViewGroup parent);
    4. ListView的每个条目必须是复杂条目
      1. 自定义一个相对布局list_item.xml
      2. 将list_item.xml转换为View对象,填充布局文件为View对象,使用打气筒
      3. 如何将布局大气为View对象?
    5. 点击每个条目可以打电话
      1. lv.setOnItemClickListener(OnItemClickListener);
      2. 自定义一个OnItemClickListener
      3. 在onItemClick(int postion)方法中拨打电话
        1. User user = datas.get(positon);
        2. user.getPhone();
        3. 打电话
          1. Intent setAction setData(Uri)
          2. startActvity(intent);
          3. 添加权限

8. 常用获取Inflate的写法(**)

  1. View view = View.inflate(R.layout.xxx,args);
  2. View view2 = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);
  3. LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUTINFLATERSERVICE); View view3 = inflater.inflate(R.layout.list_item, null);

9. ArrayAdapter的使用(*)

ListView lv = (ListView) findViewById(R.id.lv); /* * 参数1:上下文 * 参数2:系统布局资源idandroid.R.layout.simplelistitem_1 * 参数3:数组或则集合 */ lv.setAdapter(new ArrayAdapter(this, android.R.layout.simplelistitem_1, cities));

10. 异常

  1. tv_age.setText(user.getAge()); 11-02 08:59:08.072: E/AndroidRuntime(2680): android.content.res.Resources$NotFoundException: String resource ID #0x32 11-02 08:59:08.072: E/AndroidRuntime(2680): at android.content.res.Resources.getText(Resources.java:201) 11-02 08:59:08.072: E/AndroidRuntime(2680): at android.widget.TextView.setText(TextView.java:2863) 11-02 08:59:08.072: E/AndroidRuntime(2680): at com.huida.contacts.MainActivity$MyAdapter.getView(MainActivity.java:101)
  2. Android Not Response
    1. 在Activity中如果主(UI)线程被阻塞5秒就可能包ANR异常.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值