2017-10-28 8 views
1

FuelとResultを使用してJSONオブジェクトでレスポンスボディを取得したいとします。 これは私のコールバックコードです:燃料と結果を使用してバイト配列を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] 

は間違っている可能性が何の任意のアイデア?

+0

バイト[]はJsonのサブタイプではありません。そのため、あなたは例外を取得しています。あなたは、あなたのJsonをthosバイトで構築する必要があります(またはバイトで構築された文字列を渡す) – crgarridos

+0

[Result](https://github.com/kittinunf/Fuel#result)を使って適切なString/Json /オブジェクトを返すことができます。 ) – crgarridos

答えて

0

データは、byte []バイト配列です。それをJsonにキャストすることはできません。

val dataJson = Json(String(data)) 

上記は正しい方法です。 String(data)byte arrayのデータをStringに変換します。

関連する問題