android Json数据解析(API数据进行解析),基于URLConnection

直接show you the code

我使用的是聚合数据的api接口,朋友们您们可以自行找api进行试验,也可以申请聚合数据的api接口。


xml的布局很简单,就不贴代码了,主要两个按钮,第一个得到结果的按钮是得到返回的json数据,第二个按钮是进行json解析。


public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private Button button;
    //url地址
    private String url="http://japi.juhe.cn/joke/content/list.from?" +
            "key="+(你自己的key)+"&dtype=json&sort=asc&page=2&pagesize=4&time=1418816972";

    private String line="";
    //设置handler类,现在android已经不支持主线程直接使用网络通信,必须在线程里面使用
    private Handler mhandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= (TextView) findViewById(R.id.textView);
        button= (Button) findViewById(R.id.button);
        mhandler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what==1){
                    String s=msg.obj.toString();
                    textView.setText(s);
                }

            }
        };
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            //获得url
                            URL uri=new URL(url);
                            //建立连接
                            HttpURLConnection connection= (HttpURLConnection) uri.openConnection();
                           //设置连接方式
                            connection.setRequestMethod("GET");
                            //设置读数据的最大时间,超出时间则错误
                            connection.setReadTimeout(3000);
                            //设置连接最大时间
                            connection.setConnectTimeout(3000);
                            
                            connection.connect();
                            //获取输入流
                            InputStream inputStream=connection.getInputStream();
                            
                            //将字节流转换成字符流
                            BufferedReader bufferedReader=new BufferedReader(
                                    new InputStreamReader(inputStream,"UTF-8"));
                            
                            //获取string数据
                            StringBuilder stringBuilder=new StringBuilder();
                            if ((line=bufferedReader.readLine())!=null){
                                stringBuilder.append(line);
                            }
                            
                            //发送消息给mhanlder
                            Message message=new Message();
                            message.what=1;
                            message.obj=stringBuilder.toString();
                            mhandler.sendMessage(message);
                            
                            
                            //记得关闭
                            bufferedReader.close();
                            inputStream.close();
                            connection.disconnect();
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });

    }

}
这样就能获取到数据了,记得在android的manifest加上internet连接权限,然后得到的数据如下所示




因为我设置textview的height等于wrap_content,所以变成了这样的布局,下面给出的json的解析过程。


findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            StringBuilder sb=new StringBuilder();
            JSONObject jsonObject=new JSONObject(s);
            int code=jsonObject.getInt("error_code");
            if (code!=0){
                Toast.makeText(getApplicationContext(),"error",Toast.LENGTH_SHORT);

            }
            JSONObject object=jsonObject.getJSONObject("result");
            JSONArray jsonArray=object.getJSONArray("data");
            for (int i=0;i<jsonArray.length();i++){
                JSONObject arrayobject=jsonArray.getJSONObject(i);
                sb.append(arrayobject.getString("content"));
                sb.append("\r\n");
            }
            textView2.setText(sb.toString());

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});
这是聚合数据提供的返回的json格式

{
    "error_code": 0,
    "reason": "Success",
    "result": {
        "data": [
            {
                "content": "有一天晚上我俩一起吃西瓜,老大把西瓜籽很整洁的吐在了一张纸上,\r\n过了几天,我从教室回但宿舍看到老大在磕瓜子,\r\n我就问他:老大,你什么时候买的瓜子?\r\n老大说:刚晒好,说着抓了一把要递给我……",
                "hashId": "bcc5fdc2fb6efc6db33fa242474f108a",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": ""我女朋友气跑了"\r\n"怎么回事?严重吗?你怎么着她了?"\r\n"不严重,我只是很久没用了"",
                "hashId": "03a6095c18e1d6fe7e2c19b2a20d03d1",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "还说神马来一场说走就走的旅行,\r\n工作后就连一场说走就走的下班都不行。",
                "hashId": "10edf75c1e7d0933c91f0f39a28a2c84",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "高速路上堵车,路边葡萄地里有一哥们竟然在偷葡萄,心想太没素质了吧!\r\n不管了我也去,刚溜进葡萄地,那哥们竟问我干嘛,\r\n我撇了一眼反问道你干嘛呢?\r\n那哥们答道摘葡萄呢!\r\n我答道:我也摘葡萄呢!\r\n哥们郁闷了说我摘我家的你呢?\r\n我顿时脸红,哥你家葡萄咋卖呢?",
                "hashId": "bb572bb5b4844badb31012983f7324f5",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "和老婆在街边散步,我手上捏着一张已揉成一团的传单,\r\n走了好一会终于看到个垃圾桶,我赶紧跑过去想扔掉,\r\n没想到老婆从后边一把拉住我说:老公,那个肯定吃不得了,别捡。\r\n我一愣,发现垃圾桶顶盖上放着半个西瓜。",
                "hashId": "7ebccd3bbfaf24e010f9eb3ee68234bd",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "某考生考了个倒数第一,回到家被他爸一顿暴揍,\r\n来到学校老师让他谈谈落后的体会,\r\n学生:“我终于明白了“落后就要挨打”的道理。”",
                "hashId": "4aee2aa6a79c67682f605c4146a8eca4",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "很多人不喜欢朝九晚五的生活,然后开始创业。\r\n最终,他的生活变成了朝五晚九。",
                "hashId": "7b358c4b96cf4a8d82b85545ea8f9603",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "钱这个东西,真是害人精。\r\n小到人与人之间的矛盾,大到国家之间的战争,无不是为了钱。\r\n钱可以把人推上万众瞩目之颠,也可以使人瞬间变成阶下囚。\r\n可是,富人们却没认识到,当钱几辈子花不完时,\r\n挣再多已经没有意义,还不如早日尽点社会责任,\r\n捐助给需要的人,求得个平安幸福。\r\n看到这个的有钱人们呐,你们什么时侯能捐我点啊!",
                "hashId": "94e18075f8c9c8211dfed5f8d6a62983",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "看到一句很好的名言:我们无法拉伸生命的长度,但是我们可以拓展生命的宽度。\r\n我觉得这句话太有道理了!\r\n意思就是:虽然我们无法再长高了,但是我们还可以继续长胖。",
                "hashId": "fd8e364a4c70d46e77c1610879748a9a",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            },
            {
                "content": "女生口中所说的“理工男好萌好棒好想嫁!”,\r\n其实理工男是指“会修电脑、会设置手机、会安家用电器、\r\n会帮做PPT打EXCEL表PS修图、话少、高冷、专一、不和乱七八糟的女生来往、\r\n不爱打扮却又干净清爽、高高瘦瘦、手指纤长、戴黑框眼镜超好看的帅哥”。\r\n其实找个帅哥让他学电脑,再戴个眼镜就OK了。",
                "hashId": "5001c08a3cc8a281b15c467bc15a4911",
                "unixtime": 1418814837,
                "updatetime": "2014-12-17 19:13:57"
            }
        ]
    }
}
我只对content的内容进行了解析,其他的解析过程是类似的,在此我就不多写了。

结果如下:



有什么不会的地方或者还需要补充的地方,欢迎道友指正~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值