转载自:http://www.chenwg.com/android开发/json解析到listview

本项目是使用爱帮公交提供的SDK作为我们开发的基础,通过输入公交路线,发送到远程服务器,接着远程服务器返回一个json格式的结果数据,我再将这个json格式的结果数据解析到listview控件里。

(1)首先先去申请API KEY, 爱帮的API的网址:http://www.aibang.com/api/

(2)了解下爱帮API,爱帮返回的数据有两种格式,一种是xml,另一种是json,这次只是讲json的解析,这次实现的功能模块是“公交线路查询”

来了解一个url:http://openapi.aibang.com/bus/lines?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%B9%BF%E5%B7%9E&q=b25

将这条url放在浏览器里访问,将会返回如下的数据:

显然上面的是xml格式的数据,只要在url后面加上”&alt=json”,即可返回json格式的数据。

这条url的参数说明如下:

返回的数据的说明:

详细请查看 :http://www.aibang.com/api/usage#bus_lines

(3)下载爱帮公交SDK,解压后有两个文件夹,一个是sdk,一个是demo,公交线路查询模块就参考了一下demo,sdk文件夹下的apidoc里面的api说明文档是我们要经常看的。sdk文件夹下的lib文件夹下有个aibang-android-open-sdk-1.0.0.jar 包,我们等会新建项目时要把这个jar包导进去的,另外还要去下载httpmime-4.2.1.jar这个jar包。

(4)新建一个项目,我将其命名为MyAiBang1.0,如下图所示:

(5)建议大家先导入项目运行起来,玩下就明白了,现在也先演示下:

运行软件起来,并输入要查询的路线如下:

点击查询,便查出与25号线相关的公交路线(数据解析后填充在一个ListView控件里):

再点击其中一条路线,如点击b25路,便跳转到另一个Activity,如下:

(6)看看返回的数据,像result_num、web_url等我是用不到的,我能用到的只有name、info、stats三个字段,所以我在com.myaibang.domain包下新建一个Line类,如下:

public class Line {
private String name;
private String info;
private String stats;
public Line(String name, String info, String stats) {
this.name = name;
this.info = info;
this.stats = stats;
}
public Line() {
}
//省略getter和setter方法
}

(7)新建一个Activity,我将其命名为RouteActivity,对应下面两个页面:

    

请对应代码听我讲解,哈。

在RouteActivity里建一个内部类AibangAsyncTask,如下:

private class AibangAsyncTask extends AsyncTask<Void, Void, JSONObject>

这个主要参考下载的sdk里的demo,关于AsyncTask,大家可以网上找下相关资料看看,因为这节主要是讲json的解析,所以略过。

private static final String API_KEY=”766cb8dbbdb7fba92de17f0b2d88745b”;  API_KEY,大家懂的,用刚刚申请的。

mAibang=new AibangApi(API_KEY);  初始化,默认是返回json格式的数据。

routeData=editText.getText().toString();  这个是获取输入框里输入的路线的数据。

result=mAibang.busLines(“广州”, routeData, 0);  这里我是写死城市是广州的,result就是返回的数据,是json格式的。

JSONObject jsonObject=new JSONObject(result);

String lines=jsonObject.getString(“lines”);

JSONObject jsonObject2=new JSONObject(lines);

String line=jsonObject2.getString(“line”);

JSONArray jsonArray=new JSONArray(line);  通过LogCat可以查看到line返回的是数组,所以我将其初始化为一个json数组

List<String> data = new ArrayList<String>();

List<Line> list=new ArrayList<Line>();

for(int i=0;i<jsonArray.length();i++){

jsonObject2=jsonArray.getJSONObject(i);
String name=jsonObject2.getString(“name”);
String info=jsonObject2.getString(“info”);
String stats=jsonObject2.getString(“stats”);

list.add(new Line(name,info,stats));

data.add(name);

}   通过遍历,解析json格式的数据,data的数据添加到当前的ListView里面。

listView.setAdapter(new ArrayAdapter<String>(RouteActivity.this, android.R.layout.simple_expandable_list_item_1,data)); 这句不用解释了吧,呵!就是将数据添加到ListView显示出来。

//intent将数据传到RouteResultActivity
Intent intent=new Intent(RouteActivity.this,RouteResultActivity.class);
intent.putExtra(“resultData”, list.get(arg2).getStats()); 我要的是各个站点的数据。
startActivity(intent);
overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);一个过渡的动画,不错的例子来的,可以参考用到其他项目中去。

(8)新建名为RouteResultActivity的类,显示线路的各个站点

Intent intent=getIntent();
String value=intent.getStringExtra(“resultData”);  获取RouteActivity传过来的值。

点击B25,通过LogCat查看返回的值如下:

体育中心;石牌桥(BRT);岗顶(BRT);师大暨大(BRT);华景新城(BRT);上社(BRT);学院(BRT);科韵路;琶洲大桥北;北山;星海学院[大学城];华师[大学城];广大[大学城];广大生活区[大学城];广大公寓[大学城];大学城总站[中部枢纽]

List<String> data = new ArrayList<String>();  将解析的以上的数据一个个添加到data里。

解析的思想:主要是通过“;”,如下:

int j=0;

for(int i=0;i<value.length();i++){

if(value.charAt(i)==’;'){
infoData=value.substring(j,i);
Log.v(TAG, “返回的infoData值为”+infoData);
j=i+1;
data.add(infoData);
}

if(i==value.length()-1){
infoData=value.substring(j,i+1);
Log.v(TAG, “返回的infoData值为”+infoData);
data.add(infoData);
}

}

listView2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,data)); 显示出来了。

(9)json格式的数据解析其实很简单,关键要看好那个格式是如何组成的,有没有数组。有一个网站,格式化json格式挺不错的,介绍一下:http://jsonformatter.curiousconcept.com/

(10)除了解析json数据这块之外,本项目的首页淡入淡出的效果、两个Activity之间的跳转动画、底部tabhost导航菜单,这些在实战应用中也是常用到的,需要的话可以参考一下,对本文有疑问的可以找我。我的邮箱是262821820@qq.com该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。,大家一起共同探讨吧!哈。

json解析到listview(爱帮公交demo)相关推荐

  1. json解析到listview

    本文参与:Testin-安卓巴士Android开发原创教程大赛 本项目是使用爱帮公交提供的SDK作为我们开发的基础,通过输入公交路线,发送到远程服务器,接着远程服务器返回一个json格式的结果数据,我 ...

  2. 分析Http请求头获取爱帮公交数据

    爱帮公交公布了自己的openAPI,但是之前自己不知道,就通过chrome的开发人员控制台工具分析了爱帮工具的http请求头,然后在android端进行http请求,获得公交信息. 还算顺利,其中的一 ...

  3. 不同格式的json解析

    文章目录 一.基本数据格式 1. 一个JSON对象 2.一个JSON数组 3.复杂JSONObject 4. 复杂JSONArray 5.更复杂的json 二.解析 2.1. JSONObject解析 ...

  4. Android MVP模式 解析JSON 显示到ListView上

    Android MVP模式 解析JSON 显示到ListView上 有关MVP模式的介绍,这里不作详细解释,稍后会更新MVP设计模式,请等待链接-- 简述本次的主要功能实现: 通过mvp设计模式,(M ...

  5. Json解析后添加到ListView控件上

    主要实现的功能:就是将Jsonj解析后,显示在ListV iew控件上(包括网络取图片,是否显示劵.卡,团) Json {"resultCode":1,"resultIn ...

  6. 中国国家气象局天气预报接口、爱帮网公交查询接口

    中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/dat ...

  7. android json分页,移动测试之异步任务+JSON解析+ListView分页

    一.利用异步任务+JSON解析+ListView分页来实现网络访问数据显示在ListView中: (一).示例代码: public class MainActivity extends Activit ...

  8. Android-入门学习笔记-JSON 解析

    4 构建优秀 UI 的技巧 6 USGS 地震实时反馈和通知: http://earthquake.usgs.gov/earthquakes/feed/v1.0/index.php 电子表格格式的 U ...

  9. java json解码器_Jackson:我是最牛掰的 Java JSON 解析器(有点虚)

    在当今的编程世界里,JSON 已经成为将信息从客户端传输到服务器端的首选协议,可以好不夸张的说,XML 就是那个被拍死在沙滩上的前浪. 很不幸的是,JDK 没有 JSON 库,不知道为什么不搞一下.L ...

最新文章

  1. java---24点游戏 :从扑克中每次取出4张牌,使用加减乘除,第一个能得出24者为赢。
  2. Android input keyevent
  3. Java—抽象类和接口的区别
  4. Python基于 ImageAI 模块实践 idenprof数据集识别预测分析
  5. ptime在SIP中的应用
  6. PHP curl get post 请求的封装
  7. Java之POI操作,封装ExcelUtil实现Excel导入导出
  8. 《基础微积分教材中译版》--目录
  9. TortoiseGit - 详细提交流程
  10. 助你迈向成功之路的二十二个好习惯
  11. Git 补丁Apply Patch是干啥的?
  12. 使用Seaborn和Pandas进行相关性分析和可视化
  13. java那块最难_Java哪块最难学?
  14. 华为手机里的“麦田守望者”
  15. idea查看类层级hierarchy快捷键
  16. 二叉树的操作--递归与非递归
  17. 陆源:阿贝尔对椭圆函数论的贡献[附椭圆函数、模形式(g_2,g_3)、模函数的C++程序计算]
  18. 数据库-不允许保存更改,阻止保存要求重新创建表的更改
  19. Java导出excel中response.setHeader()参数设置
  20. 嵌入式:Keil uvision5环境下创建一个工程模板(步骤超详细)

热门文章

  1. 英雄联盟LOL设计模式猜想——策略模式
  2. 【Ukey】C#或者Java对Ukey的判断操作
  3. python读ad域日志_基于python LDAP3的AD域账号注册系统
  4. 网站后门木马怎么清理
  5. 飘雪圣域(icekingdom)
  6. 开源电商产品设计:会员系统设计
  7. 出现d3dcompiler_41.dll错误怎么解决
  8. 构建一个JPEG解码器(3):霍夫曼表
  9. 【保姆级讲解】C语言---函数精华面试题荟
  10. 水电改造常遇到的问题