2016-12-28 4 views
3

Я пытаюсь разобрать следующий json-объект с помощью retrofit 2.1.0, но я не знаю, почему нет данных в поле данных он всегда пуст.parsing json object с массивом retrofit

{ 
    "status": "OK", 
    "message": "Upload succesfull", 
    "data": [ 
    { 
     "channel": "madrid", 
     "date": "20161212221", 
     "metadata": { 
     "id": "tvmadrid", 
     "channel_id": "tvmadrid.com", 
     "channel_name": "mad",   
     }, 
     "promos": [] 
    }, 
    { 
     "channel": "barca", 
     "date": "20161233232", 
     "metadata": { 
     "id": "tvbarca", 
     "channel_id": "tvbarca.com", 
     "channel_name": "barca", 
     }, 
     "promos": [] 
    } 
    ] 
} 

Мой класс класс идет сюда.

TvChannel

public class TvChannel { 
private String status; 
private String message; 
private Data[] data; 

public String getStatus() { 
    return status; 
} 

public void setStatus(String status) { 
    this.status = status; 
} 

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 



public Data[] getData() { 
    return data; 
} 

public void setData(Data[] data) { 
    this.data = data; 
} 


@Override 
public String toString() { 
    return "status " + status + "\n" 
      + "message " + message + "\n" 
      + "Data " + data.toString(); 
} 

}

Вот метод, который называют АНИ

public void getTvChannel(User user, MultipartBody.Part body) { 

    //user.getData().getAutenticate(), 

    Call<TvChannel> callTvChannel = getAPI().listTvChannel(user.getData().getAutenticate(), body); 
    callTvChannel.enqueue(new Callback<TvChannel>() { 
     @Override 
     public void onResponse(Call<TvChannel> call, Response<TvChannel> response) { 
      if (response.isSuccessful()) { 




       Log.d(TAG, "body to string: " + response.body().getStatus()); 

       TvChannel tvChannel = response.body(); 



       ArrayList<Data> datas = new ArrayList<Data>(Arrays.asList(response.body().getData())); 

       Log.d(TAG + " getTvChannel ", " onResponse: status: " + tvChannel.getStatus() + " message: " + tvChannel.getMessage()); 

       for (Data data : datas) { 
        Log.d(TAG,data.toString()); 
       } 

      } else { 
       Log.d(TAG + " getTvChannel", " onResponse " + "Error Code " + response.code()); 
      } 
     } 

     @Override 
     public void onFailure(Call<TvChannel> call, Throwable t) { 
      Log.d(TAG + " getTvChannel ", " onFailure " + " Didn't work " + t.getMessage() + " " + t.getCause() + " \n" + Arrays.toString(t.getStackTrace())); 


     } 
    }); 
} 

спасибо заранее.

+1

попробуйте использовать ArrayList вместо вашей модели – Ayaanp

+0

используйте этот сайт, чтобы преобразовать ваш 'JSOn' в' POGO' 'http://www.jsonschema2pojo.org/ – sushildlh

+0

Я решил проблему. Некоторые, как я извлекал поле ** данные ** пустым, и это вызывало проблемы. Спасибо всем за помощь !!! – kamboj

ответ

0

Вам не нужно следующее .... просто позвоните tvChannel.getData()

ArrayList<Data> datas = new ArrayList<Data>(Arrays.asList(response.body().getData()));

0

Заменить массив со списком, как это:

@SerializedName("data") 
private List<Data> data; 

public List<Data> getData() { 
    return data; 
} 

public void setData(List<Data> data) { 
    this.data = data; 
} 
0

Попробуйте

1) Изменение класс модели Data[] data до ArrayList<Data>

2) получить "данные", как

List<Data> datas=tvChannel.getData(); 

я надеюсь, что это работает.

0

enter image description here Вопрос был в вашем JSON, Пожалуйста, положите в jsonlint.com JSON

package com.example; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Datum { 

@SerializedName("channel") 
@Expose 
private String channel; 
@SerializedName("date") 
@Expose 
private String date; 
@SerializedName("metadata") 
@Expose 
private Metadata metadata; 
@SerializedName("promos") 
@Expose 
private List<Object> promos = null; 

public String getChannel() { 
return channel; 
} 

public void setChannel(String channel) { 
this.channel = channel; 
} 

public String getDate() { 
return date; 
} 

public void setDate(String date) { 
this.date = date; 
} 

public Metadata getMetadata() { 
return metadata; 
} 

public void setMetadata(Metadata metadata) { 
this.metadata = metadata; 
} 

public List<Object> getPromos() { 
return promos; 
} 

public void setPromos(List<Object> promos) { 
this.promos = promos; 
} 

} 
-----------------------------------com.example.Example.java----------------------------------- 

package com.example; 

import java.util.List; 
import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Example { 

@SerializedName("status") 
@Expose 
private String status; 
@SerializedName("message") 
@Expose 
private String message; 
@SerializedName("data") 
@Expose 
private List<Datum> data = null; 

public String getStatus() { 
return status; 
} 

public void setStatus(String status) { 
this.status = status; 
} 

public String getMessage() { 
return message; 
} 

public void setMessage(String message) { 
this.message = message; 
} 

public List<Datum> getData() { 
return data; 
} 

public void setData(List<Datum> data) { 
this.data = data; 
} 

} 
-----------------------------------com.example.Metadata.java----------------------------------- 

package com.example; 

import com.google.gson.annotations.Expose; 
import com.google.gson.annotations.SerializedName; 

public class Metadata { 

@SerializedName("id") 
@Expose 
private String id; 
@SerializedName("channel_id") 
@Expose 
private String channelId; 
@SerializedName("channel_name") 
@Expose 
private String channelName; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getChannelId() { 
return channelId; 
} 

public void setChannelId(String channelId) { 
this.channelId = channelId; 
} 

public String getChannelName() { 
return channelName; 
} 

public void setChannelName(String channelName) { 
this.channelName = channelName; 
} 

} 
0

Попробуйте усложнить модель с классом пользовательских данных, а не с помощью импорта данных (кстати, какой класс данных вы «ве импортирована):

public class TvChannel { 
private String status; 
private String message; 
ArrayList<Data> data; 
... 
} 
public class Data 
{ 
    String channel; 
    int date; 
    Metadata metadata; 
    String[] promos;//of course, if that's string array 
} 

public class Metadata 
{ 
    String id; 
    String channel_id; 
    String channel_name; 
} 

И вы можете получить данные следующим образом:

TvChannel tvChannel = response.body(); 
String metadataId = tvChannel.data.get(index).metadata.id; 

 Смежные вопросы

  • Нет связанных вопросов^_^