Gson学习

来源:互联网 发布:以下哪种立体匹配算法 编辑:程序博客网 时间:2024/05/21 09:09


补充知识点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;   }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();   }@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn list.get(arg0);   }@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;   }@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//内部类viewHolderViewHolder 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类的标题和idreturn convertView;   }class ViewHolder {      TextView tv;   }}


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


参考链接:

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

0 0
原创粉丝点击