Android项目---快递查询

时间:2023-03-09 03:58:15
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("&nbsp;", " "))
.append(":")
.append(data.getJSONObject(i).getString("context")
.replace("&nbsp;", " ")).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";
} }