补充知识点json的表现形式:




什么是Gson

Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。即把json转为为java对象或者把对象转换为json.下面这段代码就是Gson把json数据转换为java对象的。

       private PhotosData data;
        Gson gson = new Gson();
        data = gson.fromJson(result, PhotosData.class); //result为jason字符串

示例


gson解析一个列表
Gson gson = new Gson();
Book book = gson.fromJson(result, Book.class);
Log.i("info", book.getTitle() + ":" + book.getPublisher() + ":"
+ book.getTags().size());


实体类Book:

public class Book {
private String id;
private String catlog;

public String getId() {
return id;
   }

public void setId(String id) {
this.id = id;
   }

public String getCatlog() {
return catlog;
   }

public void setCatlog(String catlog) {
this.catlog = catlog;
   }


}



完整的

用Gson解析json字符串,然后传给 PhotoData的对象 data,接着data获得list对象,后面的代码就是把数据list放入适配器,并显示在lvPhoto(listView)中

//        private PhotosData data;
//        private List<PhotosData.ListBean> mPhotoList;
        Gson gson = new Gson();
        data = gson.fromJson(result, PhotosData.class);

            mPhotoList = data.getList();// 获取组图列表集合

            if (mPhotoList != null) {
                mAdapter = new PhotoAdapter();
                lvPhoto.setAdapter(mAdapter);
                
            }

适配器

这种写法是适配在一个java文件,还有一种写法就是把适配器单独放在一个包中

   //listView显示
    class PhotoAdapter extends BaseAdapter {

        private BitmapUtils utils;

        public PhotoAdapter() {
            utils = new BitmapUtils(mContext);
            utils.configDefaultLoadingImage(R.drawable.news_pic_default);
        }

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

        @Override
        public PhotosData.ListBean getItem(int position) {
            return mPhotoList.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = View.inflate(mContext, R.layout.list_photo_item,
                        null);

                holder = new ViewHolder();
                holder.tvTitle = (TextView) convertView
                        .findViewById(R.id.tv_title);
                holder.ivPic = (ImageView) convertView
                        .findViewById(R.id.iv_pic);
                holder.tv_price = (TextView) convertView.findViewById(R.id.tv_price);
                holder.tv_market_price = (TextView) convertView.findViewById(R.id.tv_market_price);
                holder.tv_purchased = (TextView) convertView.findViewById(R.id.tv_purchased);

                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            //获取PhotosData.ListBean集合中的每一个元素item
            PhotosData.ListBean item = getItem(position);
            holder.tvTitle.setText(item.getItem_name());
            holder.tv_price.setText(item.getItem_price());
            holder.tv_market_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);  //添加删除线
            holder.tv_market_price.setText(item.getItem_market_price());
            holder.tv_purchased.setText(item.getItem_buy_num());

            utils.display(holder.ivPic, "http://192.168.1.199/jdmz/"+item.getItem_pic());


            return convertView;
        }



    }




    static class ViewHolder {
        public TextView tvTitle;
        public ImageView ivPic;
        public TextView tv_price;
        public TextView tv_market_price;
        public TextView tv_purchased;
    }


把Adapter单独放置的写法,这里BookListAdapter后面有两个参数(上下文对象,数据源),第一种写法是没有参数的,因为adapter就在本类中,根本没有必要传递。


Gson gson = new Gson();
Book book = gson.fromJson(result, Book.class);
ArrayList<Book> books = book.getBook();
 adapter = new BookListAdapter(this,Books);
   lv.setAdapter(adapter);



adapter类的写法


public class BookListAdapter extends BaseAdapter {
private Context c;
private ArrayList<Book> list;

public BookListAdapter(Context context, ArrayList<Book> books) {
this.c = context;
this.list = books;
   }

@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
   }

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
   }

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
   }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
//内部类viewHolder
ViewHolder holder = null;

if (convertView == null) {
         convertView = View.inflate(c, R.layout.item_list, null);
         holder = new ViewHolder();
         holder.tv = (TextView) convertView.findViewById(R.id.tv);
         convertView.setTag(holder);
      } else {
         holder = (ViewHolder) convertView.getTag();
      }
      Book b = list.get(position);
      holder.tv.setText(b.getCatlog() + "\n" + b.getId()); //这个是自己在适配器中写入Books类的标题和id
return convertView;
   }

class ViewHolder {
      TextView tv;
   }

}


这两种写法都是需要继承Adapter,不同的地方就是第二种在new BookListAdapter的时候在括号中加入了两个参数上下文和数据源list集合,以及把adapter放入单独一个类中。


参考链接:

http://www.json.org/json-zh.html

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐