Koltin30.Takeout登录数据使用ORMlite事务操作(15)

LoginActivityPresenter.kt

package com.example.takeout.presenter

import android.util.Log
import com.example.takeout.beans.User
import com.example.takeout.model.dao.TakeoutOpenHelper
import com.example.takeout.ui.activity.LoginActivity
import com.example.takeout.utils.TakeoutApp
import com.google.gson.Gson
import com.j256.ormlite.android.AndroidDatabaseConnection
import com.j256.ormlite.dao.Dao
import java.sql.Savepoint

//继承NetPresenter
class LoginActivityPresenter(val loginActivity: LoginActivity) : NetPresenter() {

    //使用手机号码登录的业务
    fun loginByPhone(phone: String) {
        val homeCall = takeoutService.loginByPhone()
        homeCall.enqueue(callback)
    }

    override fun parserJson(json: String) {
        val user = Gson().fromJson(json, User::class.java)
        if (user != null) {
            //缓存到内存中
            TakeoutApp.sUser = user
            var connection: AndroidDatabaseConnection? = null
            var startPoint: Savepoint? = null
            try {
                //缓存到本地数据库中,SqLiteOpenhelper,要使用SQL语句
                //第三方ORM框架(ormlite,greendao),直接操纵javabean,
                val takeoutOpenHelper = TakeoutOpenHelper(loginActivity)
                val userDao: Dao<User, Int> = takeoutOpenHelper.getDao(User::class.java)
                //保证如果已有此用户,就不需再创建了
//            userDao.create(user)
//            userDao.createOrUpdate(user)//无法根据id区分新老用户
                Log.e("login", "创建新用户或者更新老用户信息")
                //支持事务回滚,第二个参数是支持读写
                connection = AndroidDatabaseConnection(takeoutOpenHelper.writableDatabase, true)
                //事务保存点
                startPoint = connection.setSavePoint("start")
                connection.isAutoCommit = false //取消自动提交
                //TODO:区分新用户和老用户,并且统计比率
                //step1:查找以前是否有这个用户记录
                val userList: List<User> = userDao.queryForAll()
                var isOldUser: Boolean = false
                //遍历确定是否是老用户
                for (i in 0 until userList.size) {
                    val u = userList.get(i)
                    if (u.id == user.id) {
                        isOldUser = true
                    }
                }
                if (isOldUser) {
                    userDao.update(user)
                    Log.e("login", "老用户更新信息")
                } else {
                    userDao.create(user)
                    Log.e("login", "新用户登录")
                }
                connection.commit(startPoint)
                Log.e("login", "事务正常")
                loginActivity.onLoginSuccess()
            } catch (e: Exception) {
                Log.e("login", "出现ormlite事务异常," + e.localizedMessage)
                loginActivity.onLoginFailed()
                if (connection != null) {
                    connection.rollback(startPoint)
                }
            }
        } else {
            loginActivity.onLoginFailed()
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值