2016-07-12 5 views
0

Привет всем, у меня есть некоторые проблемы, чтобы десериализовать мой json с помощью gson, когда я пытаюсь десериализовать мой список, я не поймаю никаких ошибок, но всякий раз, когда я пытаюсь отображать содержимое списка i получил исключение java.lang.NullPointerException.java.lang.NullPointerException при десериализации с помощью gson

Вот 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 (« подробности десерта », r.myPlaylistDetails.size() +" ");"

+0

Этот вопрос очень широк. Попробуйте сузить его до самого простого возможного проблемного случая, например, работает ли это, когда в вашей модели и образце данных есть только одно поле? Вы видите ошибки во время выполнения? См. [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

+0

Спасибо, я нашел исправление для своей проблемы, я сделаю это для своего следующего сообщения. – Aseith

ответ

0

Я заменил

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

по десериализовать мой JSON правильно

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

затем показать мои данные, как это:

Log.d("deser details", r.title); 
Смежные вопросы