快递100手机app选择快递目的地查询使用什么框架做的

4475人阅读
Android App开发(27)
同时也分享一个火车票查询的:
接口估计不能用了,新的接口php写的,可以研究下。
,欢迎吐槽。
火车余票查询源码地址(接口已经不可用):
快递查询源码地址:
获取快递信息的部分内容参考了网上的一个代码。
1、利用快递100提供的免费api查询快递相关信息。这里是解析返回来的网页。快递100需要申请key,但是个人app只提供了这个,so。。。。。。。
2、我在子线程里面去获取信息,处理,然后利用handler更新Ui,
最后的结果中,用了两个List&String& &一个用于存放时间,另外一个对应,存放快递物流信息,因为考虑到在后面显示的时候,时间和内容分开(原本打算,做个界面类似于淘宝里面的效果,但后来放弃了,。有时间再做个demo。请看图方框部分:
处理数据,通过将网页元素里面的&p&&/p&结点里面的内容拿出来,取出需要的东西就行。但是有个地方我好像随便了点,不靠谱的做法,
else if (tempStr.startsWith(&建议操作&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
org.jsoup.nodes.Document doc = Jsoup.parse(result);//
Elements element = doc.body().getElementsByTag(&p&);
Object[] objArr = element.toArray();
Pattern p = pile(&&.+?&|\\&|\\·&,
Pattern.DOTALL);
String tempStr =
ArrayList&String& timeList = new ArrayList&String&();// 存放快递的时间
ArrayList&String& infoList = new ArrayList&String&();// 存放快递的对应时间点的信息
for (int i = 3; i & objArr.length - 2; i++) {
Matcher m = p.matcher(objArr[i].toString());
tempStr = m.replaceAll(&&);
if (TextUtils.isEmpty(tempStr)) {
} else if (tempStr.startsWith(&建议操作&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
00:25:57 福建省泉州市石狮市公司 已收件 操作员:包叶明
timeList.add(new String(tempStr.substring(0, 19)));
infoList.add(new String(tempStr.substring(20)));
* 子线程联网获取数据
* @author xiangxm
class MyThread extends Thread {
private HashMap&String, String& threadMap =
public MyThread(HashMap&String, String& map) {
threadMap = new HashMap&String, String&();
this.threadMap =
public void run() {
int rand = (int) Math.random() * 1000 + 1000;
String strurl = &/q.jsp?rand=& + rand
+ &&id=& + threadMap.get(&companyId&) + &&postid=&
+ threadMap.get(&order_num&) + &&fromWeb=null&;
Message msg = new Message();
msg.what = WAITTING;
mHandler.sendMessage(msg);// /q.jsp?rand=1000&id=aae&postid=&fromWeb=null
String result = getData(strurl);// /index_all.html?type=yuantong&postid=
if (result.equals(&&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
org.jsoup.nodes.Document doc = Jsoup.parse(result);//
Elements element = doc.body().getElementsByTag(&p&);
Object[] objArr = element.toArray();
Pattern p = pile(&&.+?&|\\&|\\·&,
Pattern.DOTALL);
String tempStr =
ArrayList&String& timeList = new ArrayList&String&();// 存放快递的时间
ArrayList&String& infoList = new ArrayList&String&();// 存放快递的对应时间点的信息
for (int i = 3; i & objArr.length - 2; i++) {
Matcher m = p.matcher(objArr[i].toString());
tempStr = m.replaceAll(&&);
if (TextUtils.isEmpty(tempStr)) {
} else if (tempStr.startsWith(&建议操作&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
00:25:57 福建省泉州市石狮市公司 已收件 操作员:包叶明
timeList.add(new String(tempStr.substring(0, 19)));
infoList.add(new String(tempStr.substring(20)));
Log.e(&----------时间---------最后结果&, timeList.toString());
Log.e(&----------物流的详细信息---------最后结果&, infoList.toString());
msg = new Message();
msg.what = FINISHED;
mHandler.sendMessage(msg);
if (timeList.isEmpty() || infoList.isEmpty()) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
Intent intent = new Intent();
intent.setClass(MainActivity.this, PackageDetailInfoActivity.class);
intent.putStringArrayListExtra(&timeList&, timeList);
intent.putStringArrayListExtra(&infoList&, infoList);
Bundle bundle = new Bundle();
bundle.putString(&companyName&, infoMap.get(&companyName&));// 公司名称
bundle.putString(&companyId&, infoMap.get(&companyId&));
bundle.putString(&order_num&, infoMap.get(&order_num&));// 运单号
intent.putExtras(bundle);
startActivity(intent);
overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
获取数据方法:
* @param strurl
public String getData(String strurl) {
String output = &&;
url = new URL(strurl);
InputStream is = url.openStream();
BufferedReader buffer = new BufferedReader(new InputStreamReader(
is, &UTF-8&));
String tem = &&;
while ((tem = buffer.readLine()) != null) {
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return &&;
3、handler用于刷新Ui
private static final int WAITTING = 0;
private static final int FINISHED = 1;
private static final int ERROR = 2;
private ProgressDialog progressD
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case WAITTING:
progressDialog.show();
case ERROR:
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
case FINISHED:
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
Common.closeKeyboardCommAct(MainActivity.this);// 关闭键盘
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, &未获取到相关信息,请验证查询条件!&,
Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
4、整个画面代码:MainActivity.java & 包含:
检查网络,离线使用时候,提醒.....选择快递公司,输入订单号,否则提醒,动画效果抖动文本框.....利用正则表达式检查输入的单据号是否符合标准,主要是放置输入汉字等字符。因为各个快递公司,单据号包含的不一样,有的有字母有的没有。再按一次退出程序
long waitTime = 2000;
long touchTime = 0;
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if ((currentTime - touchTime) &= waitTime) {
Toast.makeText(this, &再按一次退出&, Toast.LENGTH_SHORT).show();
touchTime = currentT
package com.xiangxm.
import java.io.BufferedR
import java.io.IOE
import java.io.InputS
import java.io.InputStreamR
import java.net.MalformedURLE
import java.net.URL;
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.regex.M
import java.util.regex.P
import org.jsoup.J
import org.jsoup.select.E
import android.app.A
import android.app.AlertD
import android.app.ProgressD
import android.content.I
import android.content.pm.ActivityI
import android.os.B
import android.os.H
import android.os.M
import android.text.TextU
import android.util.L
import android.view.M
import android.view.MenuI
import android.view.MenuI
import android.view.MotionE
import android.view.V
import android.view.View.OnTouchL
import android.view.W
import android.view.animation.A
import android.view.animation.AnimationU
import android.view.inputmethod.InputMethodM
import android.widget.B
import android.widget.EditT
import android.widget.LinearL
import android.widget.TextV
import android.widget.T
import com.xiangxm.cls.cls_
import com.xiangxm.cls.cls_
import com.xiangxm.myapp.MyA
import com.
public class MainActivity extends Activity implements
android.view.View.OnClickListener {
private LinearLayout selectCompanyL
private Button searchB
private Button historyB
private EditText order_numT
private TextView companynameT
private TextV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setUiOptions(
ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW);
setContentView(R.layout.activity_main);
myApplication = MyApplication.getInstance();
initView();
Common.closeWhenOncreate(MainActivity.this);// 进入界面关闭软键盘
* 初始化界面
public void initView() {
title = (TextView) findViewById(R.id.title);
phonenumber = (TextView) findViewById(R.id.phonenumbertxt);
helpinfotext = (TextView) findViewById(R.id.helpinfotext);
companynameTxt = (TextView) findViewById(panynametxt);
companynameTxt.setText(&&);
selectCompanyLayout = (LinearLayout) findViewById(panyname_layout);
searchBtn = (Button) findViewById(R.id.searchbtn);
historyBtn = (Button) findViewById(R.id.historybtn);
order_numTxt = (EditText) findViewById(R.id.order_numtxt);
selectCompanyLayout.setOnClickListener(this);
searchBtn.setOnClickListener(this);
historyBtn.setOnClickListener(this);
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(&正在为您查询...&);
progressDialog.setCancelable(true);
progressDialog.setTitle(&提示信息&);
changeBtnBackground();
if (!Common.hasShortcut(this)) { // 创建快捷方式
Common.addShortcut(this);
if (!Common.onlineFlag(MainActivity.this)) {
Toast.makeText(this, &离线使用中,非联网状态不能查询订单信息!&, Toast.LENGTH_SHORT)
private MyApplication myA
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent =
if (v.getId() == R.id.searchbtn) {
if (TextUtils.isEmpty(companynameTxt.getText())) {
Animation shakeAnim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.shake_x);
panynameTxt.startAnimation(shakeAnim);
Toast.makeText(MainActivity.this, &您还未选择快递公司!&,
Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(order_numTxt.getText())) {
Animation shakeAnim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.shake_x);
this.order_numTxt.startAnimation(shakeAnim);
Toast.makeText(MainActivity.this, &您还未输入订单号!&,
Toast.LENGTH_SHORT).show();
String order_num = order_numTxt.getText().toString().trim();
Pattern p = pile(&[\\da-zA-Z]+?&);
Matcher m = p.matcher(order_num);
if (!m.matches()) {
Toast.makeText(MainActivity.this, &您的订单号不符合标准,请检查!&,
Toast.LENGTH_SHORT).show();
infoMap.put(&order_num&, order_num);
infoMap.put(&mark&, &&);// 备注信息暂时存为空
new MyThread(infoMap).start();
} else if (v.getId() == panyname_layout) {
intent = new Intent();
intent.setClass(MainActivity.this, SelectCompanyActivity.class);
startActivityForResult(intent, 6);
overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
} else if (v.getId() == R.id.historybtn) {
boolean bol = cls_savehistory.checkHasDataOrNot(Common.dbh);
if (bol) {
// 可伸缩的listview
intent = new Intent();
intent.setClass(MainActivity.this,
CheckPackageHisActivity.class);
overridePendingTransition(R.anim.slide_left, R.anim.slide_right);
startActivity(intent);
Toast.makeText(MainActivity.this, &暂无历史记录!&, Toast.LENGTH_SHORT)
HashMap&String, String& infoMap = new HashMap&String, String&();
// @Override
// public boolean onCreateOptionsMenu(Menu menu) {
// // MenuItem item = menu.add(0, SETTINGS_ID, 0, &settings&);
// // item.setIcon(R.drawable.ic_setting);
// // item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
// MenuInflater inflater = getMenuInflater();
// inflater.inflate(R.menu.activity_main, menu);
// return super.onCreateOptionsMenu(menu);
// @Override
// public boolean onOptionsItemSelected(MenuItem item) {// 处理点击事件 最下面
// switch (item.getItemId()) {
// * case R.id.menu_settings: startActivity(new Intent(this,
// * SettingActivity.class));
// case R.id.menu_delete:
// new AlertDialog.Builder(this).setTitle(&Action Menu Item&)
// .setPositiveButton(&确认&, null)
// .setNegativeButton(&取消&, null).show();
// default:
// return super.onOptionsItemSelected(item);
* 修改按钮背景图片
public void changeBtnBackground() {
class MyBtnOnTouch implements OnTouchListener {
int drawable[] =
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.searchbtn) {
drawable = new int[] { R.drawable.searchbtn,
R.drawable.searchbtn_pressed };
} else if (v.getId() == R.id.historybtn) {
drawable = new int[] { R.drawable.history_btn_normal,
R.drawable.history_btn_pressed };
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackgroundResource(drawable[1]);
case MotionEvent.ACTION_UP:
v.setBackgroundResource(drawable[0]);
searchBtn.setOnTouchListener(new MyBtnOnTouch());
historyBtn.setOnTouchListener(new MyBtnOnTouch());
private static final int WAITTING = 0;
private static final int FINISHED = 1;
private static final int ERROR = 2;
private ProgressDialog progressD
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case WAITTING:
progressDialog.show();
case ERROR:
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
case FINISHED:
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
Common.closeKeyboardCommAct(MainActivity.this);// 关闭键盘
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
Toast.makeText(MainActivity.this, &未获取到相关信息,请验证查询条件!&,
Toast.LENGTH_SHORT).show();
super.handleMessage(msg);
* 用于存放结果的map key:timeList value: infoList
private HashMap&List&String&, List&String&& resultMap = new HashMap&List&String&, List&String&&();
* 子线程联网获取数据
* @author xiangxm
class MyThread extends Thread {
private HashMap&String, String& threadMap =
public MyThread(HashMap&String, String& map) {
threadMap = new HashMap&String, String&();
this.threadMap =
public void run() {
int rand = (int) Math.random() * 1000 + 1000;
String strurl = &/q.jsp?rand=& + rand
+ &&id=& + threadMap.get(&companyId&) + &&postid=&
+ threadMap.get(&order_num&) + &&fromWeb=null&;
Message msg = new Message();
msg.what = WAITTING;
mHandler.sendMessage(msg);// /q.jsp?rand=1000&id=aae&postid=&fromWeb=null
String result = getData(strurl);// /index_all.html?type=yuantong&postid=
if (result.equals(&&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
org.jsoup.nodes.Document doc = Jsoup.parse(result);//
Elements element = doc.body().getElementsByTag(&p&);
Object[] objArr = element.toArray();
Pattern p = pile(&&.+?&|\\&|\\·&,
Pattern.DOTALL);
String tempStr =
ArrayList&String& timeList = new ArrayList&String&();// 存放快递的时间
ArrayList&String& infoList = new ArrayList&String&();// 存放快递的对应时间点的信息
for (int i = 3; i & objArr.length - 2; i++) {
Matcher m = p.matcher(objArr[i].toString());
tempStr = m.replaceAll(&&);
if (TextUtils.isEmpty(tempStr)) {
} else if (tempStr.startsWith(&建议操作&)) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
00:25:57 福建省泉州市石狮市公司 已收件 操作员:包叶明
timeList.add(new String(tempStr.substring(0, 19)));
infoList.add(new String(tempStr.substring(20)));
Log.e(&----------时间---------最后结果&, timeList.toString());
Log.e(&----------物流的详细信息---------最后结果&, infoList.toString());
msg = new Message();
msg.what = FINISHED;
mHandler.sendMessage(msg);
if (timeList.isEmpty() || infoList.isEmpty()) {
msg = new Message();
msg.what = 10;
mHandler.sendMessage(msg);
Intent intent = new Intent();
intent.setClass(MainActivity.this, PackageDetailInfoActivity.class);
intent.putStringArrayListExtra(&timeList&, timeList);
intent.putStringArrayListExtra(&infoList&, infoList);
Bundle bundle = new Bundle();
bundle.putString(&companyName&, infoMap.get(&companyName&));// 公司名称
bundle.putString(&companyId&, infoMap.get(&companyId&));
bundle.putString(&order_num&, infoMap.get(&order_num&));// 运单号
intent.putExtras(bundle);
startActivity(intent);
overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
* @param strurl
public String getData(String strurl) {
String output = &&;
url = new URL(strurl);
InputStream is = url.openStream();
BufferedReader buffer = new BufferedReader(new InputStreamReader(
is, &UTF-8&));
String tem = &&;
while ((tem = buffer.readLine()) != null) {
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return &&;
// 点击空白处 软键盘消失
public boolean onTouchEvent(MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm != null && imm.isActive()) {
return imm.hideSoftInputFromWindow(this.getCurrentFocus()
.getWindowToken(), 0);
long waitTime = 2000;
long touchTime = 0;
public void onBackPressed() {
long currentTime = System.currentTimeMillis();
if ((currentTime - touchTime) &= waitTime) {
Toast.makeText(this, &再按一次退出&, Toast.LENGTH_SHORT).show();
touchTime = currentT
private TextV
private TextV
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode == 8 && requestCode == 6) {
Bundle bundle = data.getExtras();
if (bundle == null) {
Toast.makeText(MainActivity.this, &获取数据失败!&, Toast.LENGTH_SHORT)
infoMap = new HashMap&String, String&();
String name = bundle.getString(&companyName&);
String str = bundle.getString(&companyId&);
String id = TextUtils.isEmpty(str) ? && :
infoMap.put(&companyName&, name);
infoMap.put(&companyId&, id);
List&String& resultList = cls_companyinfo.getCompanyName(
Common.dbh, id);
if (resultList.get(0).equals(&&)) {
helpinfotext.setVisibility(View.GONE);
title.setVisibility(View.GONE);
title.setText(&&);
title.setText(&温馨提示:&);
helpinfotext.setText(&查询须知:& + resultList.get(0));
if (resultList.get(1).equals(&&)) {
phonenumber.setVisibility(View.GONE);
title.setVisibility(View.GONE);
title.setText(&&);
title.setText(&温馨提示:&);
phonenumber.setText(&查询电话:& + resultList.get(1));
companynameTxt.setText(TextUtils.isEmpty(name) ? && : name);
super.onActivityResult(requestCode, resultCode, data);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:114105次
积分:2857
积分:2857
排名:第8506名
原创:119篇
转载:28篇
评论:46条怎么用自己做的APP(利用简网APP工厂)链接快递100、手机地图、爱帮公交等手机应用?
已有帐号?
无法登录?
社交帐号登录您的位置:
→ 快递100 app(快递查询) v3.1.9 安卓版
快递100 app(快递查询) v3.1.9 安卓版快递100手机客户端下载|
网友评分:8
软件大小:4.8M
软件语言:中文
软件类型:国产软件
软件类别:免费软件 / 生活服务
更新时间:
软件等级:
官方网站:
运行环境:Android
软件厂商:
顶好评:50%
同类相关软件
16.2M/中文/10.098.8M/中文/10.02.8M/英文/10.028.4M/中文/10.04.7M/中文/10.0
快递100实现国内主流快递公司信息跟踪服务,帮助顾客稳定、便捷的查询到所需的快递单号信息。提供一站式的快递查询服务,查询无需验证码,支持手机查快递。官方介绍查快递,寄快递,上快递100.中文互联网「最全最智能」的快递查询服务商;成立三年,累计提供近「120亿」次快递查询服务;传统软件厂商「金蝶国际」软件集团出品;快递100的特色1.智能查快递:直接输单号(复制发货短信,用摄像头扫描条码,语音等多种方式录单),不用选快递;2.联系快递员:查询结果里可直接联系「快递公司、快递网点、快递员」,方便「问题件」的时候快速找到包裹;3.多彩的快递:每家快递公司都有颜色,查询结果是多彩的;4.我的快递单:自动保存查询记录,自动帮你分类你的快递单,5.联系快递员查询结果里可直接联系快递员;【支持快递】1.中文快递申通,顺丰,圆通,中通,汇通,韵达,天天快递,宅急送,增益,国通,佳吉,运通,优速;EMS,平邮,挂号信,邮政小包,邮政国内邮件,邮政国际邮件,国际e邮宝,国际EMS;安能物流,德邦物流,新邦物流,大田物流,越丰物流,恒路物流,华夏龙,盛辉物流;中邮物流,中铁物流,远成物流,信丰物流,天地华宇,嘉里物流,急先达,如风达;凡客订单;2.国际快递EMS,FedEx,TNT,DHL,UPS,USPS,OnTrac,OCS;Aramex,Austrialia Post,Bpost,Canada Post,Ctily-Link ,Hong Kong Post;更新日志-修复韵达不能查询的问题;-修复上一版本遗留的问题;
猜你喜欢 快递查询工具
快递查询软件能够快速便捷的查看订单物流状况,一般而言大部分的快递查询工具都具备查找所有物流公司的单号,先今主流的快递公司,快递软件上都会有相应的查询选项,比如中通申通圆通韵达顺丰等。快递单号查询工具操
其他版本下载
快递100 app(快递查询) v3.1.9 安卓版
软件无法下载或下载后无法使用,请点击报错,谢谢!
请描述您所遇到的错误,我们将尽快予以修正,谢谢!
*必填项,请输入内容
本类下载排行
2.31 2.32 3.53 8.04 10.05 .06 10.07 10.08 10.09 6.610 10.011 10.012 10.013 10.014 10.015
本类精品软件
13.3M/中文/.06.6M/中文/8.014.9M/中文/10.05.2M/中文/10.012.7M/中文/10.06.1M/中文/5.03.8M/中文/10.0
装机必备软件
本类集合软件请登陆后使用
只需一步,快速开始
吧友自助信息发布区,请自行甄别
查看: 1290|回复: 7
请问大家用啥记录快递?查询快递?除了快递100还有啥好用的app ..
请问大家手机用啥记录快递?查询快递?除了快递100还有啥好用的app?
打开二维码扫描 对着 快递单上的二维码 就可以查询
或者 输入快递单号查询&
用我的软件 直接扫描 查询&
快递100不满足你的需求吗?
快递100输入数字就可以,还要多好用啊?难道还有更牛逼的不用输入单号查询?
Powered by

我要回帖

更多关于 怎么查询快递的目的地 的文章

 

随机推荐