2016-12-20 93 views
2

我得到一个错误,而试图执行下面的代码:不能老是解决“内容长度和流长度不同意”错误

fun parseErrorCodes(response: Response<*>): List<String> { 
     val errorCodes: MutableList<String> = ArrayList() 
     try { 
      val listType = object : TypeToken<ArrayList<ApiError>>() { 
      }.type 
      val errorJson = JsonParser().parse(response.errorBody().string()).asJsonObject.get("response") 
      if (errorJson.isJsonArray) { 
       val errors = Gson().fromJson<List<ApiError>>(errorJson, listType) 
       for (apiError in errors) { 
        errorCodes.add(apiError.errorCode) 
       } 
       return errorCodes 
      } else { 
       errorCodes.add(Gson().fromJson(errorJson, ApiError::class.java).errorCode) 
       return errorCodes 
      } 
     } catch (e: Exception) { 
      e.printStackTrace() 
     } 
     return errorCodes 
    } 

在该行出现的错误:val errorJson = JsonParser().parse(response.errorBody().string()).asJsonObject.get("response")

有人可以帮我解决这个错误吗?

回答

3

我找到了我的问题的答案。问题在于我试图解析API的响应两次,第一次显示错误消息,然后获取错误代码来处理它们以备将来验证。

这是我的代码的外观:

ErrorHandler.showError(activity, response) 
val errorCodes = ErrorHandler.parseErrorCodes(response) 
handleErrorCodes(errorCodes) 

所以,这两种方法showError和parseErrorCodes用API响应工作。