使用 Fuel 和 Result 将字节数组转换为 Json
Posted
技术标签:
【中文标题】使用 Fuel 和 Result 将字节数组转换为 Json【英文标题】:Cast byte array to Json using Fuel and Result 【发布时间】:2018-04-09 19:10:10 【问题描述】:我想使用 Fuel 和 Result 在 JSON 对象中获取我的响应正文。 这是我的回调代码:
private fun LoginCallback(result: Result<Any, Exception>?)
mAuthTask = null
showProgress(false)
val (data, error) = result ?: return (Toast.makeText(applicationContext,
R.string.error_wrong, Toast.LENGTH_SHORT).show())
result.success
val dataJson = data as Json
val user: SharedPreferences = getSharedPreferences(SAVED_USER_INFOS, 0)
val editor = user.edit()
editor.putString(SAVED_ACCESS_TOKEN, dataJson.obj().getString(SAVED_ACCESS_TOKEN))
editor.putString(SAVED_TOKEN_LIFETIME, dataJson.obj().getString(SAVED_TOKEN_LIFETIME))
editor.apply()
finish()
startActivity<MainActivity>()
result.failure
showProgress(false)
mPasswordView!!.error = getString(R.string.error_incorrect_password)
mPasswordView!!.requestFocus()
但是当我尝试将我的数据(字节数组)转换为 Json 时,我遇到了这个错误:
java.lang.ClassCastException: byte[] cannot be cast to com.github.kittinunf.fuel.android.core.Json
知道这是从哪里来的吗?在我更改为另一个 API 路由之前,该代码正在运行。
我验证了一个 JSON 字符串存储在数据中。
而且 API 响应似乎是有效的。
Response : OK
Length : 220
Body : "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1OWVlZDU4NzIxMjcwMzc2MDUwZmY2MjAiLCJpYXQiOjE1MDkxNzcds0MjgsImV4cCI6MTU5NTU3NzQyOH0.VwAkLeKW2SL3bMDhQIs-0Pwx0kMg9xgzpDLxprbCUvQ","tokenExpirationDate":1509263828796
Headers : (13)
null : [HTTP/1.1 200 OK]
Connection : [Keep-Alive]
Content-Length : [220]
Content-Type : [application/json; charset=utf-8]
Date : [Sat, 28 Oct 2017 07:57:08 GMT]
ETag : [W/"dc-SzYVR7bdKvnAvN0IajN0NVs3SIE"]
Keep-Alive : [timeout=5, max=100]
Server : [Apache/2.4.25 (Debian)]
X-Android-Received-Millis : [1509177392976]
X-Android-Response-Source : [NETWORK 200]
X-Android-Selected-Protocol : [http/1.1]
X-Android-Sent-Millis : [1509177392520]
X-Powered-By : [Express]
知道可能出了什么问题吗?
【问题讨论】:
byte[] 不是 Json 的子类型。因为你得到了例外。你应该用这些字节构造你的 Json(或传递一个用字节构造的字符串) 看起来你可以使用Result返回正确的String/Json/对象 【参考方案1】:数据是byte []
- 字节数组。您不能将其转换为 Json。
val dataJson = Json(String(data))
以上是正确的做法。
String(data)
会将 byte array
数据转换为 String
。
【讨论】:
以上是关于使用 Fuel 和 Result 将字节数组转换为 Json的主要内容,如果未能解决你的问题,请参考以下文章