Android项目---快递查询
快递查询,快递100上有更多接口信息
1.快递查询的接口是 快递公司的code值+快递单号 进行的网络查询。第一步,怎么将快递公司的名字转换成code值,传递给接口。下面是快递公司以及对应的code值得xml文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 快递公司对应代码 -->
<string-array name="ems_code">
<item>yuantong</item>
<item>yunda</item>
<item>shentong</item>
<item>shunfeng</item>
<item>zhongtong</item>
<item>ems</item>
<item>zhaijisong</item>
<item>quanfengkuaidi</item>
<item>rufengda</item>
</string-array> <!-- 快递公司名称 -->
<string-array name="ems_company">
<item>圆通速递</item>
<item>韵达快运</item>
<item>申通快递</item>
<item>顺丰快递</item>
<item>中通速递</item>
<item>EMS</item>
<item>宅急送</item>
<item>全峰快递</item>
<item>如风达</item>
</string-array> </resources>
2.解析xml文件,将获得的公司名变成code值传递给接口连接。
private String[] emsCommpany;//公司名称
private String[] emsCode; // 公司编码名称
private String mCompany_Name;// 公司名称
private String mCompany_Code;// 公司的编码:圆通快递----yuantong emsCommpany = getResources().getStringArray(R.array.ems_company);
emsCode = getResources().getStringArray(R.array.ems_code); mCompany_Code = emsCode[position].toString().trim();// 公司编号
mCompany_Name = emsCommpany[position].toString().trim();// 公司名称
3.对网络进行连接,获取网络数据
/*
* 请加入: 查询前的网络判断 如果手机没有接入网络提示打开网络 如果网络正常再去进行查询 查询的时候 如果getResponseResult
*/
public static String getResponseResult(String httpurl, String format)
throws IOException { URL geturl = new URL(httpurl);
HttpURLConnection connection = (HttpURLConnection) geturl
.openConnection();
connection.setConnectTimeout();// 连接服务器的超时时间
connection.setReadTimeout();// 从服务器读取数据的超时时间
connection.connect();// 默认是GET请求
int code = connection.getResponseCode();
StringBuffer result = new StringBuffer();
if (code == ) {// 如果连接成功
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream(), "UTF-8"));
String lines; while ((lines = reader.readLine()) != null) {
result.append(lines);
}
reader.close();
System.out.println("网络连接正常");
connection.disconnect();
} else {
System.out.println("网络连接异常");
connection.disconnect();
}
connection.disconnect();
return result.toString();
}
3.快递信息进行json数据解析
/**
* 2 解析JSON 得到ExpressInfo对象
*
* @param jsonStr
* @return
*/
public ExpressBean parseJSON(String jsonStr) {
ExpressBean express = new ExpressBean();
// 根据字符串得到JSON对象
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// 取出快递状态 data
JSONArray data = jsonObj.getJSONArray("data");
// 循环取出JSON数组中的对象 得到每一条 快递状态
StringBuffer sb = new StringBuffer();
for (int i = ; i < data.length(); i++) {
sb.append(
data.getJSONObject(i).getString("time")
.replace(" ", " "))
.append(":")
.append(data.getJSONObject(i).getString("context")
.replace(" ", " ")).append("\n");
}
express.setOpt_message(sb.toString());// 把取出的快递状态赋值 String nu = jsonObj.getString("nu");
express.setPost_id(nu);// 把取出的快递单号赋值 String company = jsonObj.getString("com");
express.setCompany(company);// 把取出的快递公司赋值 System.out.println("查询到的信息:" + express.toString());
// 设置一个快递查询的默认查询结果 默认为网络连接失败
express.setRequestCode(Constants.NET_LINK_ERROR); //
} catch (JSONException e) {
System.out.println("JSON解析异常");
}
return express;
}
快递查询中Spinner的使用
除了常规的定义,注册绑定以外,最终要的操作就是在spinner列表中适配数据,以及重写onItemSelectedListener的监听事件
// 实例化spinner
private void initSpinner() {
ArrayAdapter<CharSequence> adapter = ArrayAdapter
.createFromResource(this, R.array.ems_company,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt(getResources().getString(
R.string.input_express_company));
spinner.setOnItemSelectedListener(new SpinnerOnSelectedListener());
} // 创建一个内部类通过公司名字找到对应的编号
class SpinnerOnSelectedListener implements OnItemSelectedListener { @Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// 根据点击的位置找到公司编码的位置
mCompany_Code = emsCode[position].toString().trim();// 公司编号
mCompany_Name = emsCommpany[position].toString().trim();// 公司名称
Log.i("Info", "ems_code:" + mCompany_Code+mCompany_Name);
} /**
* 没有选择的时候,默认圆通快递
*/
@Override
public void onNothingSelected(AdapterView<?> parent) {
mCompany_Code = "yuantong";
} }
Android项目---快递查询的更多相关文章
- python爬虫练手项目快递单号查询
import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...
- Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件. 其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(r ...
- 快递查询SDK
简介: 快递查询的SDK,使用的是快递100的智能查询,此SDK只是中间包装了一层而已,单对于普通的快递业务查询已经足够,也省去开发者研究的时间,拿来即用. 用途: 1.对接微信公众平台 2.对接需要 ...
- Android项目实战--手机卫士开发系列教程
<ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件 保存到相册 2 分钟前 上传 Android项目实战--手机卫士01- ...
- 快递查询api(多接口方案)
/** 本环境使用php+smarty,结合两种快递api调取快递数据 * 说明,先快递鸟调取数据,失败后再调取快递网的数据* 快递鸟 http://www.kdniao.com 快递网 http:/ ...
- Android项目开发全程(二)--Afinal用法简单介绍
本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...
- 微信小程序(一)快递查询
2007 年 1 月 9 日,乔布斯在旧金山莫斯科尼会展中心发布了首款 iPhone,而在十年后的 1 月 9 日,微信小程序正式上线.张小龙以这样的形式,向乔布斯致敬. 小程序在哪里? 小程序功能模 ...
- Android之——ContentResolver查询的三种方式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47785491 今天做到一个小项目.查询手机中短信的信息,当然得去系统暴露出来的数据 ...
- (转载) android项目大全,总有你所需的
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 [置顶] android项目大全,总有你所需的 标签: 源 ...
随机推荐
- java.lang.IllegalStateException: You need to use a Theme.AppCompat theme
配置: 中设置theme为 <application android:allowBackup="true" android:icon="@mipmap/ic_lau ...
- java多线程学习(两)——创建一个线程
一个.java创建两个线程的方法 1.从java.lang.Thread派生一个新类线程类,其覆盖run()方法 2.实现Runnable接口.重载Runnable接口中的run()方法. 使用Thr ...
- 浅谈Hybrid技术的设计与实现(转)
前言 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发效率的要求,这个时候使用IOS&Andriod开发一个APP似乎成本有点过高了,而H5的低成本.高效率.跨平台等特性 ...
- ubuntu 14.04 安装搜狗拼音输入法
原文:ubuntu 14.04 安装搜狗拼音输入法 ubuntu桌面系统下终于有了好用的拼音法-搜狗拼音输入法,欲在ubuntu 14.04下安装搜狗拼音输入法相当的简单. 先到搜狗拼音官网下载对应的 ...
- Redis 缓存 + Spring 的集成示例(转)
<整合 spring 4(包括mvc.context.orm) + mybatis 3 示例>一文简要介绍了最新版本的 Spring MVC.IOC.MyBatis ORM 三者的整合以及 ...
- 自定义Data Service Providers
自定义Data Service Providers 作者:AlexJ 翻译:谈少民 原文链接:http://blogs.msdn.com/b/alexj/archive/2010/01/07/data ...
- android EditText问题多行文本输入
一旦习惯了网络和swing在文本框输入,我们Android突然缺乏这样的管制,刚开始使用它是相当费力.为了要实现多行文本输入框和显示.逐一克服这些问题,如下面: 1. 怎么做EditText显示区域在 ...
- GitFlow使用说明
———————安装--------------- $ git clone --recursive git://github.com/nvie/gitflow.git $ cd gitflow $ [s ...
- Swift入门教程:基本语法(三)
打印输出 Swift提供了2个打印输出函数 println :输出内容后会自动换行 print :对比println,少了个自动换行的功能 示例 输出字符串 println("欢迎学习传智播 ...
- session什么时候被创建
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用HttpServletRequest.getSession(true) ...