【问题标题】:java.lang.NullPointerException while deserializing with gson使用 gson 反序列化时出现 java.lang.NullPointerException
【发布时间】:2016-07-12 21:36:28
【问题描述】:

大家好,我在用 gson 反序列化我的 json 时遇到了一些麻烦,当我尝试反序列化到我的列表时,我没有发现任何错误,但是每当我尝试显示列表的内容时,我得到一个 java.lang.NullPointerException。

这是json:

{
  "_id": "577f81286ed8b475f5faf6fb",
  "title": "bad (feat. vassy) [radio edit]",
  "album": "Listen",
  "artist": {
    "_id": "577f81140e8784358e32ae2d",
    "name": "david guetta"
  },
  "genre": {
    "_id": "577f81140e8784358e32ae2e",
    "name": "dance"
  },
  "duration": "2m50s",
  "year": 2014,
  "artwork": {
    "small": "https://i.scdn.co/image/f59354f8d3f2841e44c1bd7aa0cd55a22843cfc7",
    "medium": "https://i.scdn.co/image/9b092f765831793404d46b816d688135ff32735f",
    "large": "https://i.scdn.co/image/6e94ab39c917096d876b895dbab0019953d27a96",
    "default": "https://i.scdn.co/image/6e94ab39c917096d876b895dbab0019953d27a96"
  },
  "extraGenres": [],
  "extraArtists": []
}

这是我的模型:

public class SongDetails {

    public String _id;
    public String title;
    public String album;

    public String duration;
    public int year;

    @SerializedName("artist") Artist artist;
    public static class Artist {
        public String _id;
        public String name;
    }

    @SerializedName("genre") Genre genre;
    public static class Genre {
        public String _id;
        public String name;
    }


    @SerializedName("artwork") Artwork artwork;
    public static class Artwork {
        public String small;
        public String medium;
        public String large;
        @SerializedName("default")
        public String defaultX;
    }

    @SerializedName("votes") public VotesPlayer votes;
    public static class VotesPlayer {
        public int upVotes;
        public int downVotes;
        public int standing;
        public String by;
    }
}

我尝试像这样反序列化:

Gson gson = new Gson();
Log.d("playdetails to des", toDeserialize);
// toDeserialize = {"_id":"577f81286ed8b475f5faf6fb","title":"bad (feat. vassy) [radio edit]","album":"Listen","artist":{"_id":"577f81140e8784358e32ae2d","name":"david guetta"},"genre":{"_id":"577f81140e8784358e32ae2e","name":"dance"},"duration":"2m50s","year":2014,"artwork":{"small":"https://i.scdn.co/image/f59354f8d3f2841e44c1bd7aa0cd55a22843cfc7","medium":"https://i.scdn.co/image/9b092f765831793404d46b816d688135ff32735f","large":"https://i.scdn.co/image/6e94ab39c917096d876b895dbab0019953d27a96","default":"https://i.scdn.co/image/6e94ab39c917096d876b895dbab0019953d27a96"},"extraGenres":[],"extraArtists":[]}
try {
       Response r = gson.fromJson(toDeserialize, Response.class);
       Log.d("deser details", r.myPlaylistDetails.size()+"");
    } catch (Exception e) {
          e.printStackTrace();
    }

public class Response {
        public List<SongDetails> myPlaylistDetails;
    }

我收到了这个错误

W/System.err:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”

在以下行:"Log.d("deser details", r.myPlaylistDetails.size()+"");"

【问题讨论】:

  • 这个问题非常广泛。尝试将其缩小到最简单的问题案例,例如,当您的模型和样本数据只有一个字段时它是否有效?您是否看到任何运行时错误?见Minimal, Complete, and Verifiable example
  • 谢谢,我找到了解决问题的方法,我会在下一篇文章中这样做。

标签: json gson deserialization


【解决方案1】:

我换了

Response r = gson.fromJson(toDeserialize, Response.class);

通过正确反序列化我的 json

SongDetails r = gson.fromJson(toDeserialize, SongDetails.class);

然后像这样显示我的详细信息:

Log.d("deser details", r.title);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2011-12-04
    • 2017-01-27
    相关资源
    最近更新 更多