【问题标题】:Data being returned from SQLite database not being assigned to a variable从 SQLite 数据库返回的数据未分配给变量
【发布时间】: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

}

在检索行和创建阻止值传递的对象之间发生了什么?

【问题讨论】:

    标签: android sqlite kotlin


    【解决方案1】:

    您的Token 类有一个带有三个参数的构造函数,但您没有对传入的值做任何事情。

    此外,该类具有三个不可变属性,它们被初始化为 nulls。

    要使构造函数 arg 值反映在这些属性值中,请将两者结合起来,例如:

    class Token (
        @SerializedName("token_type")
        @Expose
        val tokenType:String, 
    
        @SerializedName("expires_in")
        @Expose
        expirationTime:Int,
    
        @SerializedName("access_token")
        @Expose
        accessToken:String) {}
    

    【讨论】:

    • 哇。谢谢。
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多