使用gson解析json后怎么把数组放到listview中

完美强迫症患者 2015-06-13 03:49:25
json数据是这个:
{"total":100,"rows":[{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}]}


结构是这样的

public class A {
public int total;
public List<B> rows;
}

public class B{
public string key;
public string value;
}

然后我这么写

String json = "{\"total\":100,\"rows\":[{\"key\":\"key1\",\"value\":\"value1\"},{\"key\":\"key2\",\"value\":\"value2\"}]}";
Type type = new TypeToken<B>() {}.getType();
Gson gson = new Gson();
A a = gson.fromJson(json, type);
Log.v("total",String.valueOf(a.getTotal()));

现在我已经可以得到total的数据了,然后我想请问,我需要把rows里面的内容添加到listview里面该怎么添加?
我是这么写的

for (int i = 1; i<a.getRows().size(); i++){
Map<String,String> map = mgson.fromJson(json,type);
list.add(map);
}
sim = new SimpleAdapter(mContext,list , R.layout.profession_listview,new String[]{"value"} , new int[]{R.id.pf});
mlv.setAdapter(sim);

我只要添加value的数据到listview上面去,请问现在我该怎么做?我写的那个直接崩溃了,提示错误是和我的map有关,我也觉的我这么写不对,我也不知道该怎么写,所以想请问下我要怎么写才能让她显示在listview里面?
然后我之后监听事件获得点击的item里面的数据该怎么写?
我想的是在onItemClick里面这么写

HashMap<String,String> map = (HashMap<String,String>)mlv.getItemAtPosition(position);
String nm = map.get("value");
Toast.makeText(getApplicationContext(), nm, Toast.LENGTH_SHORT).show();

请问又该怎么写呢?

两个问题
1)怎么添加value到listview里面去?
2)点击事件获得当前点击的item的数据怎么获得?

之前发了个帖子也是关于listview的,问题和这个差不多,不过没这个清晰,然后到现在没解决,换了个思路发现还是不行,想问问有没有大神知道?
没分了,不过另外那个帖子有分,可以到那个帖子留言我给分,实在感谢各位了。
被这个问题困扰两天了,昨天也是这个时候发的那篇帖子,网上能查到的都试过了,全部对我没用,真的希望能解决这个问题,谢谢谢谢!

这个是我那篇帖子的地址:http://bbs.csdn.net/topics/391052596
...全文
333 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
完全没招了,放弃掉
  • 打赏
  • 举报
回复
引用 6 楼 JohnHu 的回复:
mlv.setAdapter(new MyAdapter(mContext,a.getRows())); 这样就可以了
还是崩溃T.T

String json = "{\"total\":100,\"rows\":[{\"key\":\"key1\",\"value\":\"value1\"},{\"key\":\"key2\",\"value\":\"value2\"}]}";
        Type type = new TypeToken<B>() {}.getType();
        Gson gson = new Gson();
        A a = gson.fromJson(json, type);
        ListView mlv = (ListView) findViewById(R.id.lv);
        Log.v("total", String.valueOf(a.getTotal()));
        List<B> itemBeans = new ArrayList<>();
        for (int i = 1; i<a.getRows().size(); i++) {
            mlv.setAdapter(new MyAdapter(mContext, a.getRows()));
        }
  • 打赏
  • 举报
回复
引用 3 楼 qxs965266509 的回复:
继承BaseAdapter自定义ListView,并给ListView设置SetItemOnclick就可以了
你好,我按照你说的,继承BaseAdapter自定义ListView,可是我还是不能放到listview里面去,我想知道到底怎么放到listview里面去? 下面是我写的itembean和继承自BaseAdapter的adapter: itembean:

public class ItemBean {
    public int key;
    public String value;

    public ItemBean(int key, String value) {
        this.key= key;
        this.value= value;
    }
}
adapter:

 private List<PfItemBean> mList;
    private LayoutInflater mInflater;

    public MyAdapter(Context context, List<ItemBean> list){
        mList = list;
        mInflater = LayoutInflater.from(context);
    }

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

    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null){
            viewHolder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.pf_item, null);
            viewHolder.key= (TextView) convertView.findViewById(R.id.key);
            viewHolder.value= (TextView) convertView.findViewById(R.id.value);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        ItemBean bean = mList.get(position);
        viewHolder.key.setText(bean.key);
        viewHolder.value.setText(bean.value);
        return convertView;
    }

    class ViewHolder {
        public TextView key;
        public TextView value;
    }
Activity:

String json = "{\"total\":100,\"rows\":[{\"key\":\"key1\",\"value\":\"value1\"},{\"key\":\"key2\",\"value\":\"value2\"}]}";  
        Type type = new TypeToken<B>() {}.getType();  
        Gson gson = new Gson();  
        A a = gson.fromJson(json, type);  
        Log.v("total",String.valueOf(a.getTotal()));
        List<ItemBean> itemBeans = new ArrayList<>();
for (int i = 1; i<a.getRows().size(); i++) {
                    Map<String,String> map = gson.fromJson(json,type);
                    itemBeans.add((PfItemBean) map);
                }
                mlv.setAdapter(new MyAdapter(mContext,itemBeans));
我在运行的时候能看到log出total是100,可是他就是不显示item里面的内容,就是崩溃就是报错,真的请问下有没有人能帮帮我,卡了快一周了这个问题。 求帮助 @sagittarius1988 @u014165119
JohnHu 2015-06-15
  • 打赏
  • 举报
回复
mlv.setAdapter(new MyAdapter(mContext,a.getRows())); 这样就可以了
TedWIthAHammer 2015-06-15
  • 打赏
  • 举报
回复
你看下自己的getItem函数的重载 这个List是用来做属性的 你这个MyAdapter最好做成内部类共享这个List 然后在getItem内返回你自定义的内容条 然后在挂事件
月满轩妮诗 2015-06-15
  • 打赏
  • 举报
回复
楼主你是哪错了,贴log啊
JohnHu 2015-06-15
  • 打赏
  • 举报
回复
mlv.setAdapter(new MyAdapter(mContext,a.getRows())); 不需要放在for里,单独一条语句就行了,另外,public MyAdapter(Context context, List<ItemBean> list){改成public MyAdapter(Context context, List<B> list){
  • 打赏
  • 举报
回复
引用 3 楼 qxs965266509 的回复:
继承BaseAdapter自定义ListView,并给ListView设置SetItemOnclick就可以了
@qxs965266509 你好,能不能教教我怎么弄呢?我弄了一下也去搜了一下,实在没搞懂呀

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧