【发布时间】:2019-08-21 19:52:54
【问题描述】:
我有一种方法可以从仅包含一项的 SQLCipher 数据库返回令牌。
fun checkForToken(context: Context, password: String): Token
var returnToken = Token("", 0, "")
SQLiteDatabase.loadLibs(context)
val databaseFile: File = context.getDatabasePath("$storagePath/IndyGoTest.db")
val database: SQLiteDatabase =
SQLiteDatabase.openOrCreateDatabase(databaseFile, password, null)
database.execSQL("CREATE TABLE IF NOT EXISTS Token(tokenType STRING, expirationDate INTEGER, accessToken STRING)")
val query = database.rawQuery("SELECT * FROM Token", null)
query.use {
if (it.moveToNext()) {
with(query) {
val returnTokenType = getString(0)
val returnTokenExpiration = getInt(1)
val returnTokenAccessToken = getString(2)
returnToken =
Token(returnTokenType, returnTokenExpiration, returnTokenAccessToken)
Log.d(TAG, "Expiration value returned from DB: $returnTokenExpiration")
Log.d(TAG, "Expiration of token to be returned: ${returnToken.expirationTime.toString()}")
}
}
}
if (returnToken.expirationTime != 0 && returnToken.expirationTime != null) {
Log.d(TAG, "Token retrieved from Database")
}
query.close()
database.close()
return returnToken
}
正在找到项目的值,这允许第一个打印语句成功。但是,当我尝试将这些值传递给我的自定义 Token 对象的新实例时,它不起作用,并且第二个日志语句打印为 null。这是我的 Token 对象(带有 Retrofit 注释):
class Token (tokenType:String, expirationTime:Int, accessToken:String){
@SerializedName("token_type")
@Expose
val tokenType: String? = null
@SerializedName("expires_in")
@Expose
val expirationTime: Int? = null
@SerializedName("access_token")
@Expose
val accessToken: String? = null
}
在检索行和创建阻止值传递的对象之间发生了什么?
【问题讨论】: