解析Android中的动态json对象
问题描述:
我试图解析以下json
并使用BaseAdapter
,Android将其显示在ListView
中。这里的对象和是动态。我知道如果创建一个模型类,如果这些值不是动态的。我尝试使用以下方法获取json
,并且它不返回任何值。 Model.java
有什么不对吗?或者我应该更改json的格式?解析Android中的动态json对象
{
"effect_list":[
{
"4":[
{
"effects_id":"18",
"effects_name":"Band 1"
},
{
"effects_id":"19",
"effects_name":"Band 2"
}
],
"1":[
{
"effects_id":"1",
"effects_name":"Background Blur"
},
{
"effects_id":"4",
"effects_name":"Blemish Removal"
}
]
}
]
}
Model.java
public class Model{
@SerializedName("effect_list")
@Expose
List<Map<String,List<EffectList>>> effectlist;
public List<Map<String, List<EffectList>>> getEffectlist() {
return effectlist;
}
public void setEffectlist(List<Map<String, List<EffectList>>> effectlist) {
this.effectlist = effectlist;
}
}
EffectList.java
public class EffectList {
@SerializedName("effects_id")
@Expose
private String effectsId;
@SerializedName("effects_name")
@Expose
private String effectsName;
//GETTERS AND SETTERS
}
MyContactAdapter2.java
public class MyContactAdapter2 extends BaseAdapter {
ArrayList<Map<String, List<EffectList>>> contactList;
Context context;
private LayoutInflater mInflater;
public MyContactAdapter2(Context context, ArrayList<Map<String, List<EffectList>>> data) {
this.context = context;
this.mInflater = LayoutInflater.from(context);
contactList = data;
}
@Override
public int getCount() {
return 0;
}
@Override
public List<HashMap<String, List<EffectList>>> getItem(int position) {
return (List<HashMap<String, List<EffectList>>>) contactList.get(position);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder1 vh1;
if (convertView == null) {
View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false);
vh1 = ViewHolder1.create((RelativeLayout) view);
view.setTag(vh1);
} else {
vh1 = (ViewHolder1) convertView.getTag();
}
EffectList item = (EffectList) getItem(position);
// vh.textViewName.setText(item.getEffectsId());
vh1.textViewName.setText(item.getEffectsName());
vh1.textViewEmail.setText(item.getEffectsId());
// Picasso.with(context).load(item.getProfilePic()).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(vh.imageView);
return vh1.rootView;
}
private static class ViewHolder1 {
public final RelativeLayout rootView;
public final ImageView imageView;
public final TextView textViewName;
public final TextView textViewEmail;
private ViewHolder1(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) {
this.rootView = rootView;
this.imageView = imageView;
this.textViewName = textViewName;
this.textViewEmail = textViewEmail;
}
public static MyContactAdapter2.ViewHolder1 create(RelativeLayout rootView) {
ImageView imageView = (ImageView) rootView.findViewById(R.id.imageView);
TextView textViewName = (TextView) rootView.findViewById(R.id.textViewName);
TextView textViewEmail = (TextView) rootView.findViewById(R.id.textViewEmail);
return new MyContactAdapter2.ViewHolder1(rootView, imageView, textViewName, textViewEmail);
}
}
}
MyContactAdapter2有什么不对吗?
答
我想你应该改变这种方法
@Override
public int getCount() {
return contactList.size();
}
希望这有助于
答
您可以从JSON
从本网站
http://www.jsonschema2pojo.org/
我从你的json
使这个创造POJO Model class
!尽管你的json
应该更简单!
----------------------------------- com.example.EffectList.java ---- -------------------------------
package com.example;
import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class EffectList {
@SerializedName("4")
@Expose
private List<com.example._4> _4 = null;
@SerializedName("1")
@Expose
private List<com.example._1> _1 = null;
public List<com.example._4> get4() {
return _4;
}
public void set4(List<com.example._4> _4) {
this._4 = _4;
}
public List<com.example._1> get1() {
return _1;
}
public void set1(List<com.example._1> _1) {
this._1 = _1;
}
}
-----------------------------------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("effect_list")
@Expose
private List<EffectList> effectList = null;
public List<EffectList> getEffectList() {
return effectList;
}
public void setEffectList(List<EffectList> effectList) {
this.effectList = effectList;
}
}
-----------------------------------com.example._1.java-----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class _1 {
@SerializedName("effects_id")
@Expose
private String effectsId;
@SerializedName("effects_name")
@Expose
private String effectsName;
public String getEffectsId() {
return effectsId;
}
public void setEffectsId(String effectsId) {
this.effectsId = effectsId;
}
public String getEffectsName() {
return effectsName;
}
public void setEffectsName(String effectsName) {
this.effectsName = effectsName;
}
}
-----------------------------------com.example._4.java-----------------------------------
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class _4 {
@SerializedName("effects_id")
@Expose
private String effectsId;
@SerializedName("effects_name")
@Expose
private String effectsName;
public String getEffectsId() {
return effectsId;
}
public void setEffectsId(String effectsId) {
this.effectsId = effectsId;
}
public String getEffectsName() {
return effectsName;
}
public void setEffectsName(String effectsName) {
this.effectsName = effectsName;
}
}
可能的重复http://*.com/questions/41355969/how-to-parse-following-json-using-gson-in-android –