1

JSON をオブジェクトにデシリアライズしようとしていますが、NullPointerException. 検索の結果、おそらくデータ構造に問題があることがわかりました。

適切なクラスを作成するのを手伝ってもらえますか、それとも間違いを見つけることができますか?

[
  {
    "id": "54",
    "brand": "Cooper",
    "model": "Discoverer H\/T Plus",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "test1",
    "time_add": "2013-11-14 12:42:47",
    "imgs": [
      {
        "id": "28",
        "reused_id": "54",
        "path_big": "path5",
        "path_small": "",
        "time_add": "0000-00-00 00:00:00"
      }
    ]
  },
  {
    "id": "55",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "ooooooopll",
    "time_add": "2013-11-14 12:43:55",
    "imgs": [
      {
        "id": "29",
        "reused_id": "55",
        "path_big": "path5",
        "path_small": "",
        "time_add": "0000-00-00 00:00:00"
      }
    ]
  },
  {
    "id": "56",
    "brand": "Kumho",
    "model": "Kumho KH17",
    "d": "19",
    "w": "185",
    "h": "50",
    "comment": "bugaga",
    "time_add": "2013-11-14 13:14:58",
    "imgs": [
      {
        "id": "30",
        "reused_id": "56",
        "path_big": "path5",
        "path_small": "",
        "time_add": "0000-00-00 00:00:00"
      }
    ]
  },
  {
    "id": "57",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "",
    "time_add": "2013-11-14 13:32:11",
    "imgs": [
      {
        "id": "31",
        "reused_id": "57",
        "path_big":path5",
        "path_small": "",
        "time_add": "0000-00-00 00:00:00"
      }
    ]
  },
  {
    "id": "58",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "",
    "time_add": "2013-11-14 13:33:13",
    "imgs": [
      {
        "id": "32",
        "reused_id": "58",
        "path_big": "path5",
        "path_small": "",
        "time_add": "0000-00-00 00:00:00"
      }
    ]
  }
]

これは私が埋めようとしているクラスです:

public class Tyres {
    public Tyres() {

    }
    public String id;
    public String brand;
    public String model;
    public String d;
    public String w;
    public String h;
    public String comment;
    public String time_add;
    public ArrayList<Images> imgs;
    public Map<String, String> getInfo() {
        Map<String, String> result = new HashMap<String, String>();
        result.put("id", id);
        result.put("brand", brand);
        result.put("model", model);
        result.put("d", d);
        result.put("w", w);
        result.put("h", h);
        result.put("comment", comment);
        result.put("time_add", time_add);
        return result;
    }
    public ArrayList<Map<String, String>> getImgsInfo() {
        ArrayList<Map<String, String>> result = new ArrayList<Map<String, String>>();
        Map<String, String> imgInfo;
        for(Images img: imgs) {
            imgInfo = img.getInfo();
            result.add(imgInfo);
        }
        return result;

    }

}

public class Images {
    public Images() {

    }
    public String id;
    public String reused_id;
    public String path_big;
    public String path_small;
    public String time_add;
    public Map<String, String> getInfo() {
        Map<String, String> result = new HashMap<String, String>();
        result.put("id", id);
        result.put("reused_id", reused_id);
        result.put("path_big", path_big);
        result.put("path_small", path_small);
        result.put("time_add", time_add);

        return result;
    }
}

以下は、オブジェクトを初期化する方法です。

private void history_to_Tyres(String historyJSON) {
    Gson gson = new Gson();

    Type ttype = (Type) new ArrayList<Tyres>();
    try {
        tyres = gson.fromJson(historyJSON, ttype);
    } catch (Exception e) {
        Toast.makeText(getBaseContext(), "uncasted", Toast.LENGTH_SHORT).show();
    }
}

しかし、私がNullPointerException電話しようとするとtyres(タイヤはクラスフィールドです)

4

2 に答える 2

2
  1. クラスのすべての属性にゲッターとセッターが必要です。

  2. クラスのシリアル化可能なインターフェイスを実装します。

于 2013-11-14T20:24:46.060 に答える
1

あなたの json は "`"path_big": path5" で間違っています。

これが正しいJsonです:-

[
{
    "id": "54",
    "brand": "Cooper",
    "model": "Discoverer H/T Plus",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "test1",
    "time_add": "2013-11-14 12:42:47",
    "imgs": [
        {
            "id": "28",
            "reused_id": "54",
            "path_big": "path5",
            "path_small": "",
            "time_add": "0000-00-00 00:00:00"
        }
    ]
},
{
    "id": "55",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "ooooooopll",
    "time_add": "2013-11-14 12:43:55",
    "imgs": [
        {
            "id": "29",
            "reused_id": "55",
            "path_big": "path5",
            "path_small": "",
            "time_add": "0000-00-00 00:00:00"
        }
    ]
},
{
    "id": "56",
    "brand": "Kumho",
    "model": "Kumho KH17",
    "d": "19",
    "w": "185",
    "h": "50",
    "comment": "bugaga",
    "time_add": "2013-11-14 13:14:58",
    "imgs": [
        {
            "id": "30",
            "reused_id": "56",
            "path_big": "path5",
            "path_small": "",
            "time_add": "0000-00-00 00:00:00"
        }
    ]
},
{
    "id": "57",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "",
    "time_add": "2013-11-14 13:32:11",
    "imgs": [
        {
            "id": "31",
            "reused_id": "57",
            "path_big": "path5",
            "path_small": "",
            "time_add": "0000-00-0000: 00: 00"
        }
    ]
},
{
    "id": "58",
    "brand": "Barum",
    "model": "Bravuris",
    "d": "13",
    "w": "7",
    "h": "0",
    "comment": "",
    "time_add": "2013-11-1413: 33: 13",
    "imgs": [
        {
            "id": "32",
            "reused_id": "58",
            "path_big": "path5",
            "path_small": "",
            "time_add": "0000-00-0000: 00: 00"
        }
    ]
}
]

JSON を確認するには、www.jsonlint.com を使用してください。

`

于 2013-11-14T16:31:38.717 に答える