自定义控件
- 一分钟实现贴纸功能
- 一分钟实现TextView高亮
- 一分钟实现新手引导页
- 一分钟实现ViewPager卡片
- 一分钟实现加载对话框
- 一分钟实现轮播图
- 一分钟实现GridView拖拽
- 一分钟实现底部导航栏
- 一分钟实现底部FragmentTabhost
- 一分钟实现多张图片选择
- 一分钟实现仿美拍直播的点赞动画
- 一分钟实现高仿今日头条视频列表
- 一分钟实现购物车加减控件
- 一分钟实现省市县三级联动
- 一分钟实现二维码生成和扫描
- 一分钟实现沉浸式状态栏
- 一分钟实现图片裁剪
- 一分钟实现视频弹幕
- 一分钟实现图片缩放
- 一分钟实现旋转选择器
- 一分钟实现ofo小黄车的引导界面
- 一分钟实现自定义ImageView外貌
- 一分钟实现向左拖拽跳转详情页
- 一分钟实现QQ首页动画特效
- 一分钟实现ViewPager上下滑动
联网
工具
数据库
源码分析相关面试题
Activity相关面试题
- 保存Activity的状态
- 深刻剖析activity启动模式(一)
- 深刻剖析activity启动模式(二)
- 深刻剖析activity启动模式(三)
- Activity Task和Process之间的关系
- 源码分析service开启Activity抛异常?activity不会抛异常
- Activity优雅退出
- onCreate源码分析
Service相关面试题
与XMPP相关面试题
与性能优化相关面试题
与登录相关面试题
与开发相关面试题
- 迭代开发的时候如何向前兼容新旧接口
- 手把手教你如何解决as jar包冲突
- context的原理分析
- 解决ViewPager.setCurrentItem中间很多页面切换方案
- 字体适配
- 软键盘适配
- 机型适配,例如三星、小米、华为、魅族等
- CardView 设置水波纹效果
与人事相关面试题
-
Orm是对象与数据的映射,简单说就是让javabean和数据库表建立绑定关系。
OrmLite是对android原生SQLite的封装,OrmLiteDemo是Orm快速实现的示例工程。
-
欢迎关注微信公众号
微信公众号名称:Android干货程序员
-
开始在build.gradle添加依赖
compile 'com.j256.ormlite:ormlite-android:5.0'
-
需要的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
第一步:建立Orm关系。以User.class为例,对应数据库的t_user表。
@DatabaseField(id = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "balance")
private float balance;
@DatabaseField(columnName = "discount")
private int discount;
@DatabaseField(columnName = "integral")
private int integral;
@DatabaseField(columnName = "phone")
private String phone;
注意事项:
1.必须要添加无参构造方法;
2.id=true时id可以由我们自己赋值,如果使用generateId=true,则id由数据库自己维护,自动增长效果,auto increment。
第二步:创建OpenHelper继承OrmLiteOpenHelper,OrmLiteOpenHelper是SQLiteOpenHelper的子类。
- 在初始化数据库的oncreate中创建数据库。由于做了Orm,则指定User.class就可以创建t_user表。
TableUtils.createTable(connectionSource, User.class);
第三步:由于OrmLite封装了SQLite,所以不用再拼装SQL语句字段了,直接获取DAO层插入User对象即可。
1.先获取数据库连接:
AndroidDatabaseConnection connection = new AndroidDatabaseConnection(takeoutOpenHelper.getWritableDatabase(), true);
2.开启事务:
SavePoint savepoint = connection.setSavePoint("start"); //事务的保存点
connection.setAutoCommit(false); //事务处理需要手动提交
3.获取DAO层:
Dao<User,Integer> userDao = takeoutOpenHelper.getDao(User.class);
4.执行增删改插。插入前要判断是否已经有该用户,做防重复处理,所以有两个步骤。
User oldUser = userDao.queryForId(001);
if(oldUser!=null){
userDao.update(user);
TecentTjSdk.submitUserInfo(false); //老用户登录
Log.e("login","老用户登录");
}else{
userDao.create(user);
TecentTjSdk.submitUserInfo(true); //新用户登录
Log.e("login","新用户登录");
}
5.提交事务。connection.commit(savepoint);
6.如果出现异常,回滚事务即可。connection.rollback(savepoint);
- 最后说明:可以使用userDao.createIfNotExists(user);代替上面两个步骤,这样就可以不用开启事务了,因为这个API本身封装了事务,
而手动事务可以更灵活,比如步骤内部增加新的逻辑(代码统计,其他业务逻辑等等,如上方注释)。
网友评论