2016-12-30 13 views
0

この質問は以前に依頼されました。申し訳ありませんが、私はAndroidに新しく、その回答は私を助けませんでした。List <Map <String、List <>>> BaseAdapter、Android

私はretrofit、Androidを使用して次のjsonを解析しようとしています。下の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" 
     } 
    ] 
    } 
] 
} 

は今、私はBaseAdapterを使用してリストビュー内のJSONデータを表示したいです。

私は、実行時に次のエラーを取得しています

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); 
     } 
    } 
} 

MyContactAdapter2.java

を試してみました。

とjava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMapは私のクラスにキャストすることはできません

私はここで間違って何をしているのですか? contactListが項目として地図が含まれているためgetItem方法から

答えて

1

戻りMap<String,List<EffectList>>

@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(position); ** – Jayaprakash

関連する問題