android - 使用 Fuel 和 Result 将字节数组转换为 Json

标签 android json kotlin

我想使用 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。

val dataJson  = Json(String(data))

以上是正确的做法。 String(data) 会将 byte array 数据转换为 String

关于android - 使用 Fuel 和 Result 将字节数组转换为 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46987569/

相关文章:

kotlin - 使用 Jetpack Compose 进行参数导航

javascript - 将 JSON 数组排序为多个数组

ios - 通过 iOS 将数据发送到 POST JSON Web 服务

android - 在图像上应用滤镜时 Android 应用程序中的 java.lang.RuntimeException : Applying effect in wrong GL context!

java - 安卓工作室 : 'C:\Program Files\Java\jdk1.8.0_51\bin\java.exe' ' finished with non-zero exit value 1

android - Retrofit 或 Jackson ObjectMapper 将 "aId"属性映射到小写的 "aid"

android - Kotlin 接口(interface)中的伴随对象

android - 如何在第二个 Activity 中使用后退按钮关闭应用程序?

android - 单击抽屉导航菜单中的项目后打开新 Activity

android - 如何清除 android 中 titanium 应用程序中堆大小的增长?