无法将JSON填充到ListView

时间:2014-01-18 15:46:48

标签: android json android-listview gson

我正在使用Volley和GSON来解析远程JSON。这是我的片段:

public class LatestFragment extends ListFragment implements OnScrollListener {
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        arrItemList = new ArrayList<ItemListModel>();
        va = new LatestAdapter(getActivity(), arrItemList);

        lv = getListView();
        setListAdapter(va);
        lv.setOnScrollListener(this);

        loadItemList(1);
    }

    private void loadItemList(int page) {
        mRequestQueue = Volley.newRequestQueue(getActivity());

        GsonRequest<LatestContainer> myReq = new GsonRequest<LatestContainer>(
                Method.GET, url, LatestContainer.class,
                createMyReqSuccessListener(), createMyReqErrorListener());

        mRequestQueue.add(myReq);
    }


    private Response.Listener<LatestContainer> createMyReqSuccessListener() {
        return new Response.Listener<LatestContainer>() {
            @Override
            public void onResponse(LatestContainer response) {
                try {

                    for (int i = 0; i < response.getResults().size(); i++) {

                        ItemListModel ilm = new ItemListModel();
                        ilm.setCategory(response.getResults().get(i).getCategory());
                        ilm.setItem_id(response.getResults().get(i).getItem_id());
                        ilm.setName(response.getResults().get(i).getName());
                        ilm.setPrice(response.getResults().get(i).getPrice());
                        ilm.setUser_id(response.getResults().get(i).getUser_id());

                        arrItemList.add(ilm);


}

LatestAdapter

public class LatestAdapter extends BaseAdapter {
    public LatestAdapter(Context context, ArrayList<ItemListModel> items) {
        this.arrItemList = items;
        this.context = context;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        ViewHolder vh;
        lf = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (view == null) {
            vh = new ViewHolder();
            view = lf.inflate(R.layout.row_latest_listview, null);
            vh.tvName = (TextView) view.findViewById(R.id.txtItemName);
            vh.tvCategory = (TextView) view.findViewById(R.id.txtCategory);
            vh.tvPrice = (TextView) view.findViewById(R.id.txtPrice);
            vh.tvThumbnail = (ImageView) view.findViewById(R.id.imgPhoto);
            view.setTag(vh);
        } else {
            vh = (ViewHolder) view.getTag();
        }

        ItemListModel nm = arrItemList.get(i);
        vh.tvCategory.setText(nm.getCategory());
        vh.tvPrice.setText("RM " + nm.getPrice());
        vh.tvName.setText(nm.getName());

        return view;
    }

然而,在我运行代码之后,似乎没有填充listview。但解析是成功的。我可以在logcat中看到解析后的字符串。所以反序列化不是问题。我现在做错了什么?

1 个答案:

答案 0 :(得分:2)

确保在修改适配器的数据集后调用va.notifyDataSetChanged()