JSON的解析

本项目需要发送请求接受json文件并解析他。
我们使用的是HttpClient类来发送url。HttpClient需要一个额外的包。下载地址

发送

发送接收文件是一种耗时的行为,所以不能放在主线程中使用。

new Thread(new Runnable() {
                @Override
                public void run() {
                    HttpClient httpClient = new DefaultHttpClient();
                        HttpGet httpGet = new HttpGet(url);
                        try {
                            HttpResponse result = httpClient.execute(httpGet);
                            if (result.getStatusLine().getStatusCode() == 200) {
                                HttpEntity entity = result.getEntity();
                                String response = EntityUtils.toString(entity, "utf-8");
                                Message message = new Message();
                                message.what = SHOW_JSON;
                                message.obj = response.toString();
                                handler.sendMessage(message);
                            } else {
                                Thread.interrupted();
                            }
                        } catch (ClientProtocolException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }).start();

HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
new HttpClient和HttpGet。同时将url发送出去。里面带有信息所以就不用post而用get,这样直接接受信息。
HttpResponse result = httpClient.execute(httpGet);
new完之后需要执行。使用execute语句,返回HttpResponse对象。
如果返回的result的状态值为200,则表示发送返回成功。
返回的内容存在HttpEntity中。 使用String response = EntityUtils.toString(entity, “utf-8”);将其变成字符串。因为内容有中文,使用utf-8编码。
之后就是解析json了。因为解析也是需要时间,所以我们将信息打包放在message中,再在主线程的handler的handleMessage中处理。

解析JSON

解析JSON可以用自带的JsonObject,我这次用的是gson,下载也在上面的下载地址那里。
gson比json方便的一点就在于他比较自动。只要将json中的结构抽象出来成一个类就可以直接解析。
比如这里写图片描述
我们将他抽象JSONBean类

package com.example.getgradedemo;

import java.util.List;

import com.google.gson.Gson;

class Grade{
    String name;
    String credit;
    String gpa;
    String score;
    String rank;
    Grade(String name,String credit,String gpa,String grade,String rank){
        this.name=name;
        this.credit=credit;
        this.gpa=gpa;
        this.score=grade;
        this.rank=rank;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCredit() {
        return credit;
    }
    public void setCredit(String credit) {
        this.credit = credit;
    }
    public String getGpa() {
        return gpa;
    }
    public void setGpa(String gpa) {
        this.gpa = gpa;
    }
    public String getScore() {
        return score;
    }
    public void setScore(String grade) {
        this.score = grade;
    }
    public String getRank() {
        return rank;
    }
    public void setRank(String rank) {
        this.rank = rank;
    }
}

public class JSONBean {
    public String success;
    public String msg;
    public String code;
    public List<Grade> content;
    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }

    public List<Grade> getContent() {
        return content;
    }

    public void setContent(List<Grade> content) {
        this.content = content;
    }

}

接下来解析json

    public void parseJSON(String jsonData) {
        Gson gson = new Gson();

        JSONBean jb=gson.fromJson(jsonData,JSONBean.class);

        if (jb.success.equals("true")) {
            tableLayout.setVisibility(View.VISIBLE);
            List<Grade> lists = jb.content;
            for (Grade g : lists) {
                TableRow tableRow = new TableRow(this);
                TextView name = new TextView(this);
                TextView credit=new TextView(this);
                TextView grade=new TextView(this);
                TextView rank=new TextView(this);
                TextView gpa=new TextView(this);
                name.setSingleLine(false);
                name.setWidth(200);
                credit.setSingleLine(false);
                grade.setSingleLine(false);
                rank.setSingleLine(false);
                gpa.setSingleLine(false);

                tableRow.removeAllViews();

                name.setText(g.getName());
                tableRow.addView(name);
                credit.setText(g.getCredit());
                tableRow.addView(credit);
                grade.setText(g.getScore());
                tableRow.addView(grade);
                gpa.setText(g.getGpa());
                tableRow.addView(gpa);
                rank.setText(g.getRank());
                tableRow.addView(rank);
                tableLayout.addView(tableRow,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            }
        } else {
            Toast.makeText(this, jb.msg, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(this, GetGradeActivity.class);
            startActivity(intent);
        }

    }

Gson gson = new Gson();
JSONBean jb=gson.fromJson(jsonData,JSONBean.class);
注意我们的json里面最外层不是数组,所以返回的是个对象,如果是数组则存在List<JSONBean> 中。然后通过键值对形式将其取出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值