Android改造转换器异常

标签 android json exception retrofit

如果可以从服务器获得 2 个不同的响应请求,如何格式化/设计您的类?

注意:如果 JSON 响应格式(设计)与您的类不同,Retrofit 将抛出异常。 JSON 响应中的所有字段都必须存在于您的类中。

Java 类,如 JSON 响应:

public class RequestResponseLogin
{
   public ResponseLogin status;

   public class ResponseLogin
   {
      public boolean success;
      public List<String> message;
   }
}

JSON 响应:

{
    "status" : {
                    "success" : false
                    "message" : {
                                    "Invalid credientials",
                                    "....",
                                    "...."
                                }
                }
}

这就是我请求回复的方式:

interface iLogin
{
   @GET
   RequestResponseLogin loginUser(@Query("user") String user, @Query("pass") String pass);
}

// ....
RequestResponseLogin response = data.loginUser("admin", "abc123");

如果登录失败,则 public List<String> message;将填充来自网络服务器的消息:

message[0] = 'Invalid credentials';
message[1] = 'Invalid username';
message[2] = 'Password match correct';

但是如果网络服务器没有回复任何内容(成功登录),那么我会通过改造得到异常,因为 public List<String> message;为空时,Web 服务器会回复一条简单的空字符串消息,而不是字符串数组。如果我改变 public List<String> message; 就会起作用至public String message; ,但我不能,因为如果登录失败,它一定是一个字符串数组。

最佳答案

这与改造无关。默认情况下,Gson 用于反序列化 JSON 响应。

由于您的服务器发回不一致的 JSON 结构,因此您应该在 Gson 实例上使用自定义 TypeAdapter 来处理此问题。

创建 Gson 实例(本例中为“gson”)后,您可以将其传递给 Retrofit,如下所示:

RestAdapter ra = new RestAdapter.Builder()
    // ... normal stuff ...
    .setConverter(new GsonConverter(gson))
    .build();

关于Android改造转换器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331803/

相关文章:

json - Set-AzureRmVMADDomainExtension 无法将 VM 添加到 AD 域

android - 如何模拟 Nexus 4?

java - ImageButton findViewById 返回 null

javascript - JSON Data 获取常用数据列表 : Jquery or Javascript

exception - 当传递非映射参数时,期望映射的函数什么时候会默默地返回 nil?

c++ - OpenGL-颜色清晰时异常

sql - SQLite Delphi认为不正确的异常

android - 作业调度服务

android - 通过 Android 手机路由视频流流量

javascript - 错误: "JSON.parse: unexpected character at line 1 column 1 of the JSON data" when include additional php file