哪个更好:使用数组列表中的映射或pojo类与json响应进行交互

时间:2016-06-13 10:21:59

标签: android json pojo

我有点困惑,因为很长一段时间我将json响应直接保存到ArrayList>并显示到我的listView,但现在,看着其他人的代码,我注意到他们正在使用POJO类与JSON进行交互,这是更好的方法吗?如果是请解释原因?因为使用POJO意味着我必须编写额外的代码,但如果将响应直接保存到arraylist使我的工作完成,那么我为什么要使用POJO类?

2 个答案:

答案 0 :(得分:0)

这里没有对错的答案。这一切都取决于您的用例。如果您的解决方案有效,并且您对此感到满意,我就不明白为什么您需要更改它。

如果我不得不选择,我会选择POJO课来代表回应,但这是一个主观意见。我认为您有以下好处:

  1. 它比较干净 - 有一个单独的专用类来表示你的有效负载,这使你能够在你的代码中更具体。您不再操纵键值对Map,而是特定类的实例,它们可以具有更具体的行为。您可以指定自然顺序,相等标准等 - 可能对您的程序逻辑有用的事情
  2. 它更简单 - 我更喜欢每次调用getter然后通过属性名称访问地图并获取Object。该计划的逻辑将更加简单和安全。
  3. 在OOP最佳实践方面更好 - OOP背后的重点是拥有定义属性和行为的对象。恕我直言,使用POJO代表回应迫使您更加贴近最佳实践。
  4. 还有一些情况会更好地适应无POJO方法 - 例如,如果您只显示数据,而不是在应用程序内以任何方式操纵它。或者,如果您想减少一些时间来进行复杂的解析,那么在尝试扩充对象层次结构时可能需要这些解析。

    我最好的建议是 - 分析您的应用,检查您的使用案例,并做出明智的决定哪种方法更好。

答案 1 :(得分:0)

  1. 因此,由于OOP模式,Pojo的使用效果更好,因为您在运行时使用Java对象而无需中间Json解析。由于代码风格(我的意见),手动json解析太难看了。
  2.   

    但如果将响应直接保存到arraylist就可以完成我的工作

  3. 如果您在地图中收集对象,则可以在地图中应用不同的功能(排序,比较等),但是如果您的地图包含POJO而不是JSONS。

    1. 封装。当您使用日期作为示例或使用类型时,使用getters / setter进行数据映射而不是一次又一次地手动解析非常好。
    2. 4.对象缩放和映射:  让我们有一些对象用户的图像:

      public class User{
        int id;
      
        @SerializedName("specific_id_for_blah_blah")
        private int mSpecId
      
        @SerializedName("date_of_birthaday")
        private String mBDay;
      
      
        public Date getBirthday() {
          return new Date(mBDay); 
        }
      }
      

      这个例子我想说的是什么。

      1. 您可以使用一行代码将json映射到POJO User user = new Gson.fromJson(response, User.class); 很简单,不是吗?

      2. 名称序列化。当您的响应包含看起来很长或很奇怪的键名时,您可以使用自己的样式命名,只需使用小注释即可轻松更改。 mSpecId返回值" specific_id_for_blah_blah"

      3. 特定于平台的封装。您只能在运行时使用特定于平台的对象,而是在业务逻辑中解析操作。带数据的字符串 - >日期或日历
      4. 您还可以为您的逻辑规范覆盖POJO中的Object方法(equals,hashcode,toString)。操作。
      5. 如果您的服务器端更改某些密钥,您可以更改POJO中的密钥名称,而不是查看之前解析它的位置。在相同的情况下,如果某些参数将添加到您的回复中,您可以添加新字段和setter / getter