2016-12-30 135 views
0

此问题已经被提问。对不起,我是Android新手,这些答案没有帮助我。List <Map <String,List <>>> in BaseAdapter,Android

我想解析下面的使用翻新,Android的JSON。在下面的json中,对象和是动态。所以我使用Map来获取数据。

{ 
"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" 
     } 
    ] 
    } 
] 
} 

现在我想用BaseAdapter显示列表视图里面的JSON数据。

我试图

MyContactAdapter2.java

public class MyContactAdapter2 extends BaseAdapter { 
    List<Map<String, List<EffectList>>> contactList; 
    Context context; 
    private LayoutInflater mInflater; 

    // Constructors 
    public MyContactAdapter2(Context context, List<Map<String, List<EffectList>>> objects) { 

     this.context = context; 
     this.mInflater = LayoutInflater.from(context); 
     contactList = objects; 
    } 

    @Override 
    public int getCount() { 
     return contactList.size(); 
    } 

    @Override 
    public EffectList getItem(int position) { 
     return (EffectList) contactList.get(position); <----- ERROR HERE DURING RUNTIME 
    } 


    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final MyContactAdapter2.ViewHolder vh; 
     if (convertView == null) { 
      View view = mInflater.inflate(R.layout.get_layout_row_view, parent, false); 
      vh = MyContactAdapter2.ViewHolder.create((RelativeLayout) view); 
      view.setTag(vh); 
     } else { 
      vh = (MyContactAdapter2.ViewHolder) convertView.getTag(); 
     } 

     EffectList item = getItem(position); <----- ERROR HERE DURING RUNTIME 


     vh.textViewName.setText(item.getEffectsId()); 
     vh.textViewEmail.setText(item.getEffectsName()); 

     return vh.rootView; 
    } 

    private static class ViewHolder { 
     public final RelativeLayout rootView; 
     public final ImageView imageView; 
     public final TextView textViewName; 
     public final TextView textViewEmail; 

     private ViewHolder(RelativeLayout rootView, ImageView imageView, TextView textViewName, TextView textViewEmail) { 
      this.rootView = rootView; 
      this.imageView = imageView; 
      this.textViewName = textViewName; 
      this.textViewEmail = textViewEmail; 
     } 

     public static MyContactAdapter2.ViewHolder 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.ViewHolder(rootView, imageView, textViewName, textViewEmail); 
     } 
    } 
} 

运行期间我收到以下错误。

java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap不能转换到我的课

什么我错在这里做什么?

回答

1

返回Map<String,List<EffectList>>getItem方法,因为contactList包含地图的项目:

@Override 
    public Map<String,List<EffectList>> getItem(int position) { 
     return contactList.get(position); 
    } 

而且在getView使用键从地图访问值:

Map<String,List<EffectList>> map=getItem(position); 
    List<EffectList> effectList = map.get("KEY_NAME"); 
    // get item from effectList using for loop 
+0

感谢您的答复。 – Jayaprakash

+0

感谢您的response.now我得到以下错误不兼容的类型。 必需:com.example.prakash.pix91.get.Templates.pixjson.EffectList 找到:java.util.Map > – Jayaprakash

相关问题