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()
}
}
}