使用GSON从网络服务故障检索数据(Trouble retrieving data from web

2019-10-17 06:19发布

我已经尝试了很多样品和有关GSON和教程的东西怎么会使用它,例如工作:

  • http://www.softwarepassion.com/android-series-parsing-json-data-with-gson/

  • http://androidsmith.com/2011/07/using-gson-to-parse-json-on-android/

等等。

我的问题是,我有我的返回此JSON值http://localhost:3000/users/1.json ,那就是:

{
  "created_at": "2012-09-20T01:43:15Z",
  "id": 1,
  "name": "kevin",
  "updated_at": "2012-09-20T01:43:15Z"
} 

另一个是在该URL http://localhost:3000/users.json具有JSON值

[ {
    "created_at": "2012-09-20T01:43:15Z",
    "id": 1,
    "name": "kevin",
    "updated_at": "2012-09-20T01:43:15Z"
  }, {
    "created_at": "2012-09-20T01:43:33Z",
    "id": 2,
    "name": "pineda",
    "updated_at": "2012-09-20T01:43:33Z"
  }, {
    "created_at": "2012-09-20T01:46:08Z",
    "id": 3,
    "name": "raphael",
    "updated_at": "2012-09-20T01:46:08Z"
  }, {
    "created_at": "2012-09-20T16:13:42Z",
    "id": 4,
    "name": null,
    "updated_at": "2012-09-20T16:13:42Z"
  }, {
    "created_at": "2012-09-20T16:18:03Z",
    "id": 5,
    "name": null,
    "updated_at": "2012-09-20T16:18:03Z"
  }, {
    "created_at": "2012-09-20T16:19:23Z",
    "id": 6,
    "name": null,
    "updated_at": "2012-09-20T16:19:23Z"
  }, {
    "created_at": "2012-09-20T16:20:41Z",
    "id": 7,
    "name": null,
    "updated_at": "2012-09-20T16:20:41Z"
  } 
]

我有一点很难解析这些数据和得到它存储的目的。

Answer 1:

为了解析您的JSON,你首先需要创建一个类来包装你的数据。 你的情况:

public class Item {
  @SerializedName("created_at")
  private String createdAt;
  @SerializedName("id")
  private int id;
  @SerializedName("name")
  private String name;
  @SerializedName("updated_at")
  private String updatedAt;
  //getters and setters
}

然后,为了解析您的第一个 JSON效应初探,你就必须做到:

Gson gson = new Gson();
Item item = gson.fromJson(your1stJsonString, Item.class);

你的第二个 JSON响应是比较麻烦一些,因为它是一个数组。 问题是,你不能简单地做:

List<Item> item = gson.fromJson(your1stJsonString, List<Item>.class); //wrong!

上面的代码会失败,因为Java可以不知道类List<Item>由于类型擦除

所以,你必须做这种方式:

Type itemListType = new TypeToken<List<Item>>() {}.getType();
List<User> itemList = gson.fromJson(your2stJsonString, itemListType);

而这一切,一旦你在你的对象(或对象的列表),您可以访问所有获取的数据作为平时解析您的JSON响应:

String name = itemList.get(i).getName();

注1:请注意,我给自己定的属性类型created_at和的updated_at刚刚String ,因为它使事情变得更加容易。 我通常做这种方式,然后我解析Date或任何其他类型的confictive。 无论如何,如果你想直接解析的日期,我想你可以使用自定义解串器下面GSON的用户指南


注2:使用注释的@SerializedName有趣的是,一个字段的名称在JSON响应,并在您的应用程序分开,以遵循Java的命名约定...



文章来源: Trouble retrieving data from web service using GSON