json解析到listview(爱帮公交demo)
转载自: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)相关推荐
- json解析到listview
本文参与:Testin-安卓巴士Android开发原创教程大赛 本项目是使用爱帮公交提供的SDK作为我们开发的基础,通过输入公交路线,发送到远程服务器,接着远程服务器返回一个json格式的结果数据,我 ...
- 分析Http请求头获取爱帮公交数据
爱帮公交公布了自己的openAPI,但是之前自己不知道,就通过chrome的开发人员控制台工具分析了爱帮工具的http请求头,然后在android端进行http请求,获得公交信息. 还算顺利,其中的一 ...
- 不同格式的json解析
文章目录 一.基本数据格式 1. 一个JSON对象 2.一个JSON数组 3.复杂JSONObject 4. 复杂JSONArray 5.更复杂的json 二.解析 2.1. JSONObject解析 ...
- Android MVP模式 解析JSON 显示到ListView上
Android MVP模式 解析JSON 显示到ListView上 有关MVP模式的介绍,这里不作详细解释,稍后会更新MVP设计模式,请等待链接-- 简述本次的主要功能实现: 通过mvp设计模式,(M ...
- Json解析后添加到ListView控件上
主要实现的功能:就是将Jsonj解析后,显示在ListV iew控件上(包括网络取图片,是否显示劵.卡,团) Json {"resultCode":1,"resultIn ...
- 中国国家气象局天气预报接口、爱帮网公交查询接口
中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/dat ...
- android json分页,移动测试之异步任务+JSON解析+ListView分页
一.利用异步任务+JSON解析+ListView分页来实现网络访问数据显示在ListView中: (一).示例代码: public class MainActivity extends Activit ...
- Android-入门学习笔记-JSON 解析
4 构建优秀 UI 的技巧 6 USGS 地震实时反馈和通知: http://earthquake.usgs.gov/earthquakes/feed/v1.0/index.php 电子表格格式的 U ...
- java json解码器_Jackson:我是最牛掰的 Java JSON 解析器(有点虚)
在当今的编程世界里,JSON 已经成为将信息从客户端传输到服务器端的首选协议,可以好不夸张的说,XML 就是那个被拍死在沙滩上的前浪. 很不幸的是,JDK 没有 JSON 库,不知道为什么不搞一下.L ...
最新文章
- java---24点游戏 :从扑克中每次取出4张牌,使用加减乘除,第一个能得出24者为赢。
- Android input keyevent
- Java—抽象类和接口的区别
- Python基于 ImageAI 模块实践 idenprof数据集识别预测分析
- ptime在SIP中的应用
- PHP curl get post 请求的封装
- Java之POI操作,封装ExcelUtil实现Excel导入导出
- 《基础微积分教材中译版》--目录
- TortoiseGit - 详细提交流程
- 助你迈向成功之路的二十二个好习惯
- Git 补丁Apply Patch是干啥的?
- 使用Seaborn和Pandas进行相关性分析和可视化
- java那块最难_Java哪块最难学?
- 华为手机里的“麦田守望者”
- idea查看类层级hierarchy快捷键
- 二叉树的操作--递归与非递归
- 陆源:阿贝尔对椭圆函数论的贡献[附椭圆函数、模形式(g_2,g_3)、模函数的C++程序计算]
- 数据库-不允许保存更改,阻止保存要求重新创建表的更改
- Java导出excel中response.setHeader()参数设置
- 嵌入式:Keil uvision5环境下创建一个工程模板(步骤超详细)