2016-12-30 3 views
0

Этот вопрос задан ранее. Извините, я новичок в Android, эти ответы мне не помогли.Список <Карта <String, Список <>>> в BaseAdapter, Android

Я пытаюсь разобрать следующий json, используя модифицированный Android. В 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" 
     } 
    ] 
    } 
] 
} 

Теперь я хочу, чтобы отобразить данные JSON внутри ListView с помощью BaseAdapter.

Я попытался

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

спасибо за ответ.Но я получаю следующую ошибку Несовместимые типы. Обязательно: com.example.prakash.pix91.get.Templates.pixjson.EffectList Найдено: java.util.Map > in ** EffectList item = getItem (позиция); ** – Jayaprakash

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