2016-12-30 162 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

相關問題