在SQLCipher / SQLite中将复杂对象存储为Json-预期为BEGIN_OBJECT,但在第1行第1列为STRING

我正在尝试使用SQLCipher将事务详细信息缓存在加密的SQLite数据库中。详细信息存储在此json字符串中,该字符串是通过下面的方法从log语句获取的。

 {
   "accountInfo": {
     "balance": "","media_id": "","status_name": ""
   },"cart": [],"citationsOnaccount": [],"currentBalance": 0,"distribution": [],"incidents": [],"mediaContent": {
     "data": [
       0
     ],"filler": 0,"issuerId": 0,"media": [
       0
     ],"mediaId": "","nbPassenger": 0,"networkId": 0,"signAlgo": 0,"signKeyVersion": 0,"signLength": 0,"signOffset": 0,"signature": [
       0
     ],"structVersion": 0,"supportType": 0,"timestamp": 0,"validityEndDate": {
       "year": 2000,"month": 0,"dayOfMonth": 1,"hourOfDay": 0,"minute": 0,"second": 0
     },"validityStartDate": {
       "year": 2000,"writeKeyVersion": 0
   },"payment": {
     "amount_due": 0,"amount_paid": 0,"currency": "USD"
   },"paymentMean": "COINS","transaction_sequence_id": 34823908,"type": "none"
 }





fun cacheTransaction(transaction: Transaction) {
    AppLog.i(TAG,"cacheTransaction()")

    SQLiteDatabase.loadLibs(mContext)

    val databaseFile: File = mContext.getDatabasePath("$storagePath/database.db")

    val database: SQLiteDatabase =
        SQLiteDatabase.openOrCreateDatabase(databaseFile,encryptionKey,null)

    database.execSQL("CREATE TABLE IF NOT EXISTS Transactions(sequenceId STRING,jsonTransaction STRING)")

    val gson = GsonBuilder().setPrettyPrinting().create()

    val jsonobj = gson.toJson(transaction)

    AppLog.i(TAG,jsonobj)

    database.execSQL("INSERT into Transactions(sequenceId,jsonTransaction) VALUES(?,?)",arrayOf(transaction.sequenceId,jsonobj))

    database.close()

}

当我尝试使用此下一个方法将该对象重建为POJO时,出现帖子标题中的错误:

 private fun getcachedTransactions(): ArrayList<Transaction> {

    AppLog.i(TAG,"getcachedTransactions()")

    val transactionList: ArrayList<Transaction> = ArrayList()

    SQLiteDatabase.loadLibs(mContext)

    val databaseFile: File = mContext.getDatabasePath("$storagePath/database.db")

    val database: SQLiteDatabase =
        SQLiteDatabase.openOrCreateDatabase(databaseFile,null)

    val query = database.rawQuery("SELECT * FROM sqlite_master WHERE type ='table' AND name='Transactions'",null)

    query.use {
        if (it.moveToNext()) {
            with(query) {

                val transaction = Gson().fromJson(getString(1),Transaction::class.java)

                transactionList.add(transaction)
            }
        }
    }

    database.close()

    return transactionList
}

还有POJO:

class Transaction {


@Expose
@SerializedName("create_date")
var dateCreated: String? = null

@Expose
@SerializedName("transaction_sequence_id")
var sequenceId: Int? = null

@Expose
@SerializedName("cart")
var cart = ArrayList<CartItem>()

@Expose
@SerializedName("payment")
var payment: Payment? = Payment()

@Expose
@SerializedName("distribution")
var distributedItems = ArrayList<DistributedItem>()

@Expose
@SerializedName("incidents")
var incidents = ArrayList<Incident>()

var type: String = TransactionType.NONE

var paymentMean: PaymentMeanEnum = PaymentMeanEnum.COINS

var mediaContent: MediaContent? = MediaContent()

var accountInfo: accountInfo? = accountInfo("","","")

var citationsOnaccount = ArrayList<Citation>()

var currentBalance: Int = 0

   }

关于这个错误,我所读到的一切都没有引出我的答案,大括号应该指示Json对象的开始。我想念什么?

gtopds 回答:在SQLCipher / SQLite中将复杂对象存储为Json-预期为BEGIN_OBJECT,但在第1行第1列为STRING

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3108828.html

大家都在问