我正在尝试使用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对象的开始。我想念什么?