需要使用jar包
fastjson或gson这两个jar包。
//Gson的使用方式
Gson gson=new Gson();
String str=ReadAssetsFile.readtext(this,"json_ss");//this当前类,"json_ss"需要解析的文件名
UserMessage userMessage=gson.fromJson(str,UserMessage.class);//需要解析的json文件最外层类名
//fastjson的使用方法
String json=ReadAssetsFile.readtxt(this,"json_h");
UserMessage user = JSON.parseObject(json,UserMessage.class);
以一个例子来演示:
网络数据源:
{"resultCode":1,"resultInfo":"SUCCESS","info":{"pageInfo":{"total":28,"pageSize":10,"lastPageNumber":3,"nowPage":1,"currNum":10},"merchantKey":[{"merchantID":"5327","name":"瑞庭竹岛酒店","coupon":"网上预定入住可享返现优惠","location":"四川省成都市高新区老成仁路8号","distance":"203m","picUrl":"http://www.warmtel.com/igme_pic/fe3e79c1f349474b98f06477bbdc009f.jpg","couponType":"YES","cardType":"NO","groupType":"NO","gpsX":104.079935,"gpsY":30.54066,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"2845","name":"目咖啡软件园C6店","coupon":"凭QQ美食享咖啡8折优惠","location":"四川省成都市高新区天华二路219号天府软件园C区6号楼1楼","distance":"479m","picUrl":"http://www.warmtel.com/igme_pic/33f7ab6e385143f097527d4507cabcbe.jpg","couponType":"YES","cardType":"NO","groupType":"NO","gpsX":104.078242,"gpsY":30.545434,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"5326","name":"九点国际酒店","coupon":"网上预定成功入住可返现金","location":"四川省成都市天府大道南段1号齐盛艺境[近世纪城会展中心]","distance":"556m","picUrl":"http://www.warmtel.com/igme_pic/c5721d159e63482b8a1d4dd9f70f9a03.jpg","couponType":"YES","cardType":"NO","groupType":"NO","gpsX":104.077416,"gpsY":30.53835,"goodSayNum":1,"midSayNum":0,"badSayNum":0},{"merchantID":"2841","name":"布衣客栈软件园店","coupon":"酒店消费券预订酒店返现金","location":"四川省成都市高新区世纪城南路399号[近天府软件园C区]","distance":"660m","picUrl":"http://www.warmtel.com/igme_pic/f8dc2d69a7b742eba4408bb72e510f5d.jpg","couponType":"YES","cardType":"YES","groupType":"NO","gpsX":104.080515,"gpsY":30.547937,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"11798","name":"茅台贵州液专卖店","coupon":"购买茅台红酒3件以上再送1件","location":"四川省成都市高新区中和镇姐儿堰路14号","distance":"683m","picUrl":"http://www.warmtel.com/igme_pic/df0a55009cea4b8ba2773278ffb3ff79.jpg","couponType":"NO","cardType":"NO","groupType":"NO","gpsX":104.079227,"gpsY":30.536175,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"2842","name":"巴国布衣软件园店","coupon":"持光大银行信用卡享成都巴国布衣8.8折优惠,截止2012-12-31.","location":"四川省成都市高新区世纪城南路399号","distance":"683m","picUrl":"http://www.warmtel.com/igme_pic/1f4781f9329b40218544fd4b7ec673c9.jpg","couponType":"NO","cardType":"YES","groupType":"NO","gpsX":104.080254,"gpsY":30.548117,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"5325","name":"香妃儿美容美体","coupon":"38元享980元超值美胸丰胸套餐","location":"四川省成都市高新区远大都市风景二期二号","distance":"703m","picUrl":"http://www.warmtel.com/igme_pic/26cfa2c850dd40cf9518d71ea55b687b.jpg","couponType":"NO","cardType":"NO","groupType":"NO","gpsX":104.080344,"gpsY":30.535779,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"3718","name":"锦咖啡","coupon":"凭锦咖啡折扣券可享餐品8.5折,饮品7.5折,牛排6.8折优惠.\r\n\r\n1.该优惠有效期:截止至2012年12月31日;\r\n2.凭此券可以享受以下优惠:\r\n餐品8.5折\r\n饮品7.5折\r\n牛排6.8折\r\n(营业时间:09:30-23:30)\r\n\r\n展示此页即享优惠.","location":"四川省成都市高新区天华路447-1号[近天府软件园B区]","distance":"874m","picUrl":"http://www.warmtel.com/igme_pic/7629ff4f8beb43d1bd0967baba46f6c6.jpg","couponType":"YES","cardType":"YES","groupType":"NO","gpsX":104.078756,"gpsY":30.549577,"goodSayNum":3,"midSayNum":0,"badSayNum":0},{"merchantID":"2416","name":"蜀国飘香远大店","coupon":"享菜品8.8折优惠(酒水除外)","location":"四川省成都市高新区远大都市风景商业街3号楼","distance":"1041m","picUrl":"http://www.warmtel.com/igme_pic/8f0e793995084f76a59cc789fb6f6c7e.jpg","couponType":"NO","cardType":"NO","groupType":"NO","gpsX":104.077334,"gpsY":30.533345,"goodSayNum":0,"midSayNum":0,"badSayNum":0},{"merchantID":"3719","name":"华庭茶府","coupon":"100元享120元小包优惠","location":"四川省成都市高新区天华路329号附1号[近天府软件园B区]","distance":"1057m","picUrl":"http://www.warmtel.com/igme_pic/1eeae0d361f54124bdd3b6600dcc6074.jpg","couponType":"YES","cardType":"YES","groupType":"NO","gpsX":104.078705,"gpsY":30.551274,"goodSayNum":0,"midSayNum":0,"badSayNum":0}]}}
//首先将数据一层层分出,写数据源的类:注:每一层所有数据都需要写出来,数据类型也必须一一对应
最外层:
public class JsonInfo {
private int resultCode;
private String resultInfo;
private PageinfoMer info;
public int getResultCode() {
return resultCode;
}
public void setResultCode(int resultCode) {
this.resultCode = resultCode;
}
public String getResultInfo() {
return resultInfo;
}
public void setResultInfo(String resultInfo) {
this.resultInfo = resultInfo;
}
public PageinfoMer getInfo() {
return info;
}
public void setInfo(PageinfoMer info) {
this.info = info;
}
}
info这一层
public class PageinfoMer {
private PageTotal pageInfo;
private List<Contents> merchantKey;
public List<Contents> getMerchantKey() {
return merchantKey;
}
public void setMerchantKey(List<Contents> merchantKey) {
this.merchantKey = merchantKey;
}
public PageTotal getPageInfo() {
return pageInfo;
}
public void setPageInfo(PageTotal pageInfo) {
this.pageInfo = pageInfo;
}
}
pageInfo这层
public class PageTotal {
private int total;
private int pageSize;
private int lastPageNumber;
private int nowPage;
private int currNum;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getLastPageNumber() {
return lastPageNumber;
}
public void setLastPageNumber(int lastPageNumber) {
this.lastPageNumber = lastPageNumber;
}
public int getNowPage() {
return nowPage;
}
public void setNowPage(int nowPage) {
this.nowPage = nowPage;
}
public int getCurrNum() {
return currNum;
}
public void setCurrNum(int currNum) {
this.currNum = currNum;
}
}
merchantKey这层
public class Contents {
private String merchantID;
private String name;
private String coupon;
private String location;
private String distance;
private String picUrl;
private String couponType;
private String cardType;
private String groupType;
private String gpsX;
private String gpsY;
private int goodSayNum;
private int midSayNum;
private int badSayNum;
public String getMerchantID() {
return merchantID;
}
public void setMerchantID(String merchantID) {
this.merchantID = merchantID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCoupon() {
return coupon;
}
public void setCoupon(String coupon) {
this.coupon = coupon;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDistance() {
return distance;
}
public void setDistance(String distance) {
this.distance = distance;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getCouponType() {
return couponType;
}
public void setCouponType(String couponType) {
this.couponType = couponType;
}
public String getCardType() {
return cardType;
}
public void setCardType(String cardType) {
this.cardType = cardType;
}
public String getGroupType() {
return groupType;
}
public void setGroupType(String groupType) {
this.groupType = groupType;
}
public String getGpsX() {
return gpsX;
}
public void setGpsX(String gpsX) {
this.gpsX = gpsX;
}
public String getGpsY() {
return gpsY;
}
public void setGpsY(String gpsY) {
this.gpsY = gpsY;
}
public int getGoodSayNum() {
return goodSayNum;
}
public void setGoodSayNum(int goodSayNum) {
this.goodSayNum = goodSayNum;
}
public int getMidSayNum() {
return midSayNum;
}
public void setMidSayNum(int midSayNum) {
this.midSayNum = midSayNum;
}
public int getBadSayNum() {
return badSayNum;
}
public void setBadSayNum(int badSayNum) {
this.badSayNum = badSayNum;
}
}
可以在建一个类,将自己需要的数据在提出来
public class UserBean {
private String name;
private String coupon;
private String location;
private String distance;
private String picUrl;
private int couponType;
private int cardType;
private int groupType;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCoupon() {
return coupon;
}
public void setCoupon(String coupon) {
this.coupon = coupon;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDistance() {
return distance;
}
public void setDistance(String distance) {
this.distance = distance;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public int getCouponType() {
return couponType;
}
public void setCouponType(int couponType) {
this.couponType = couponType;
}
public int getCardType() {
return cardType;
}
public void setCardType(int cardType) {
this.cardType = cardType;
}
public int getGroupType() {
return groupType;
}
public void setGroupType(int groupType) {
this.groupType = groupType;
}
}
这些数据需要在listView上显示,需要adapter适配器
listview 的xml文件和布局xml文件:
listview的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffeaeeea"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff">
<ImageView
android:layout_width="35dp"
android:layout_height="35dp"
android:src="@drawable/btn_back"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的关注"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:textColor="@android:color/black"
android:textSize="22sp"/>
</LinearLayout>
<ListView
android:id="@+id/onelist"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
布局xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="6dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#ffffff">
<ImageView
android:id="@+id/picUrlimg"
android:layout_width="90dp"
android:layout_height="90dp"
android:padding="5dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="5dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/nametext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="17sp"
android:singleLine="true"
android:ellipsize="end"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="5dp">
<ImageView
android:id="@+id/kaimg"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_alignParentRight="true"/>
<ImageView
android:id="@+id/juanimg"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_toLeftOf="@id/kaimg"/>
<ImageView
android:id="@+id/tuanimg"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_toLeftOf="@id/juanimg"/>
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/coupontext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="17sp"
android:textColor="@android:color/holo_red_dark"
android:layout_marginTop="5dp"
android:singleLine="true"
android:ellipsize="end"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/locationtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp"
android:layout_marginRight="70dp"
android:textSize="16sp"
android:singleLine="true"
android:ellipsize="end"/>
<TextView
android:id="@+id/distancetext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dp"
android:layout_marginRight="5dp"
android:textSize="15sp"/>
<ImageView
android:id="@+id/dingwei"
android:layout_width="18dp"
android:layout_height="18dp"
android:src="@drawable/info_map"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp"
android:layout_toLeftOf="@+id/distancetext"
android:layout_marginRight="3dp"
android:layout_marginLeft="3dp"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
baseadapter适配器:
public class JsonBaseAdapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
private Context mContext;
private ArrayList<UserBean> arrayList=new ArrayList<UserBean>();
public JsonBaseAdapter(Context context) {
mContext=context;
mLayoutInflater=LayoutInflater.from(context);
}
public void setdata(ArrayList<UserBean> list){
arrayList=list;
notifyDataSetChanged();
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
Viewhode viewhode=null;
if (view==null){
viewhode=new Viewhode();
view=mLayoutInflater.inflate(R.layout.buju,null);
viewhode.picUrl=(ImageView)view.findViewById(R.id.picUrlimg);
viewhode.name=(TextView)view.findViewById(R.id.nametext);
viewhode.couponType=(ImageView)view.findViewById(R.id.juanimg);
viewhode.cardType=(ImageView)view.findViewById(R.id.kaimg);
viewhode.groupType=(ImageView)view.findViewById(R.id.tuanimg);
viewhode.coupon=(TextView)view.findViewById(R.id.coupontext);
viewhode.location=(TextView)view.findViewById(R.id.locationtext);
viewhode.distance=(TextView)view.findViewById(R.id.distancetext);
view.setTag(viewhode);
}else {
viewhode=(Viewhode)view.getTag();
}
viewhode.name.setText(arrayList.get(i).getName());
viewhode.coupon.setText(arrayList.get(i).getCoupon());
viewhode.location.setText(arrayList.get(i).getLocation());
viewhode.distance.setText(arrayList.get(i).getDistance());
viewhode.cardType.setImageResource(arrayList.get(i).getCardType());
viewhode.groupType.setImageResource(arrayList.get(i).getGroupType());
viewhode.couponType.setImageResource(arrayList.get(i).getCouponType());
Picasso.with(mContext).load(arrayList.get(i).getPicUrl()).into(viewhode.picUrl);
return view;
}
public class Viewhode{
ImageView picUrl=null;
TextView name=null;
ImageView couponType=null;
ImageView cardType=null;
ImageView groupType=null;
TextView coupon=null;
TextView location=null;
TextView distance=null;
}
}
在activity中用流将网络去到的数据读出来,在将json数据解析出来
public class MyActivity extends Activity {
private ListView listView;
private JsonBaseAdapter jsonBaseAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
listView=(ListView)findViewById(R.id.onelist);
jsonBaseAdapter=new JsonBaseAdapter(MyActivity.this);
listView.setAdapter(jsonBaseAdapter);
new AsyncTask<String,Void,ArrayList<UserBean>>(){
private String url="http://192.168.1.199:8080/jj.txt";
URL url1=null;
InputStream is=null;
StringBuffer sb=new StringBuffer();
BufferedReader br=null;
@Override
protected ArrayList<UserBean> doInBackground(String... strings) {
try {
url1=new URL(url);
is=url1.openStream();
br=new BufferedReader(new InputStreamReader(is));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String line=null;
try {
while ((line=br.readLine())!=null){
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
Gson gson=new Gson();
Log.e("sb",sb.toString());
JsonInfo jsonInfo=gson.fromJson(sb.toString(),JsonInfo.class);
PageinfoMer pageinfoMer=jsonInfo.getInfo();
ArrayList<UserBean> list=new ArrayList<UserBean>();
for(Contents c:pageinfoMer.getMerchantKey()){
UserBean u=new UserBean();
u.setName(c.getName());
u.setCoupon(c.getCoupon());
u.setDistance(c.getDistance());
u.setLocation(c.getLocation());
u.setPicUrl(c.getPicUrl());
if(c.getCardType().equals("YES")){
u.setCardType(R.drawable.near_card);
}
if(c.getCouponType().equals("YES")){
u.setCouponType(R.drawable.near_ticket);
}
if(c.getGroupType().equals("YES")){
u.setGroupType(R.drawable.near_group);
}
list.add(u);
}
return list;
}
@Override
protected void onPostExecute(ArrayList<UserBean> list) {
jsonBaseAdapter.setdata(list);
}
}.execute();
}
}
附:效果图