【问题标题】:Android retrofit converter exceptionAndroid改造转换器异常
【发布时间】:2013-10-20 08:10:03
【问题描述】:

如果您可以从服务器获得 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&lt;String&gt; message; 将被来自网络服务器的消息填充:

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

但是如果网络服务器没有回复任何内容(成功登录),那么我会通过改造得到一个异常,因为public List&lt;String&gt; message; 是空的,网络服务器回复了一个简单的空字符串消息而不是字符串数组。如果我把public List&lt;String&gt; message;改成public String message;就可以了,但是我不能,因为如果登录失败,它必须是一个字符串数组。

【问题讨论】:

    标签: android json exception retrofit


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-06-28
      • 2016-11-02
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多