- 浏览: 185358 次
- 性别:
- 来自: 浙江
文章分类
最新评论
现在一些物流公司支持移动设备查询,这里我简单写了个项目。
我的快递api是快递100提供的,由于支持问题,使用的是htmlapi,访问url如下:
public static final String EXPRESS_API_URL="http://www.kuaidi100.com/applyurl?key=d3d26f3c59bd5a9b&com=com_id&nu=nu_id";
写了个工具类Util.java,具体方法如下:
package com.lml.mykuaidi;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Util {
public String setUrl(String comId, String nuId){
return Constant.EXPRESS_API_URL.replace("com_id", comId).replace("nu_id", nuId);
}
public String getData(String comId, String nuId) {
String content = "" ;
try {
String strUrl=setUrl(comId, nuId);
URL url = new URL(strUrl);
URLConnection con = url.openConnection();
con.setAllowUserInteraction(false);
InputStream urlStream = url.openStream();
String type = URLConnection.guessContentTypeFromStream(urlStream);
String charSet = null;
if (type == null)
type = con.getContentType();
byte b[] = new byte[10000];
int numRead = urlStream.read(b);
content = new String(b, 0, numRead);
while (numRead != -1) {
numRead = urlStream.read(b);
if (numRead != -1) {
String newContent = new String(b, 0, numRead, charSet);
content += newContent;
}
}
urlStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
}
在主函数MainActivity.java中,使用异步加载数据:
package com.lml.mykuaidi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
RadioButton rbSpinner, rbEditText;
Spinner spCompany;
EditText etCompany, etNum;
Button btnQuery;
int rbFlag = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findview();
setAdapter();
setListener();
}
private void findview() {
rbSpinner = (RadioButton) findViewById(R.id.rbSpinner);
rbEditText = (RadioButton) findViewById(R.id.rbEditText);
spCompany = (Spinner) findViewById(R.id.spCompany);
etCompany = (EditText) findViewById(R.id.etCompany);
etNum = (EditText) findViewById(R.id.etNum);
btnQuery = (Button) findViewById(R.id.btnQuery);
}
private void setAdapter() {
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);
spCompany.setAdapter(adapter);
}
private void setListener() {
rbSpinner.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
rbFlag = 1;
rbEditText.setChecked(false);
etCompany.setEnabled(false);
spCompany.setEnabled(true);
}
}
});
rbEditText.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
rbFlag = 2;
rbSpinner.setChecked(false);
etCompany.setEnabled(true);
spCompany.setEnabled(false);
}
}
});
btnQuery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String num = etNum.getText().toString().trim();
String code;
if (rbFlag == 1) {
String[] codes = getResources().getStringArray(R.array.ems_code);
code = codes[spCompany.getSelectedItemPosition()];
} else {
code = etCompany.getText().toString().trim();
if (code.equals("")) {
Toast.makeText(MainActivity.this, "快递公司不能为空", Toast.LENGTH_SHORT)
.show();
}
}
AsyTask task = new AsyTask(MainActivity.this);
task.execute(code, num);
}
});
}
class AsyTask extends AsyncTask<String, Integer, String> {
int i;
Context mContext;
ProgressDialog mDialog = null;
public AsyTask(Context context) {
mContext = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
i = 1;
mDialog = new ProgressDialog(mContext);
mDialog.setMessage("Please wait...");
mDialog.setCancelable(false);
mDialog.show();
}
@Override
protected String doInBackground(String... arg0) {
Util util = new Util();
String res = util.getData(arg0[0], arg0[1]);
return res;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result != null && !result.equals("")) {
Intent intent = new Intent(mContext, DataShowActivity.class);
Bundle bundle = new Bundle();
bundle.putString("data", result);
intent.putExtras(bundle);
startActivity(intent);
} else {
Toast.makeText(mContext, "连接错误!", Toast.LENGTH_SHORT).show();
}
mDialog.dismiss();
}
}
}
现实结果界面DataShowActivity.java如下:
package com.lml.mykuaidi;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TextView;
public class DataShowActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kuaidi_info);
String url= getIntent().getStringExtra("data");
WebView wvData=(WebView)findViewById(R.id.wvData);
wvData.getSettings().setDefaultTextEncodingName("utf-8") ;
wvData.getSettings().setJavaScriptEnabled(true);
String content ="<html><body><iframe name=\"kuaidi100\" src=\""+url+"\" width=\"600\" height=\"380\" "
+ "marginwidth=\"0\" marginheight=\"0\" hspace=\"0\" vspace=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html>";
wvData.loadDataWithBaseURL(null,content, "text/html", "UTF-8",null) ;
}
}
这是一个简单的demo,具体源码见附件。
我的快递api是快递100提供的,由于支持问题,使用的是htmlapi,访问url如下:
public static final String EXPRESS_API_URL="http://www.kuaidi100.com/applyurl?key=d3d26f3c59bd5a9b&com=com_id&nu=nu_id";
写了个工具类Util.java,具体方法如下:
package com.lml.mykuaidi;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Util {
public String setUrl(String comId, String nuId){
return Constant.EXPRESS_API_URL.replace("com_id", comId).replace("nu_id", nuId);
}
public String getData(String comId, String nuId) {
String content = "" ;
try {
String strUrl=setUrl(comId, nuId);
URL url = new URL(strUrl);
URLConnection con = url.openConnection();
con.setAllowUserInteraction(false);
InputStream urlStream = url.openStream();
String type = URLConnection.guessContentTypeFromStream(urlStream);
String charSet = null;
if (type == null)
type = con.getContentType();
byte b[] = new byte[10000];
int numRead = urlStream.read(b);
content = new String(b, 0, numRead);
while (numRead != -1) {
numRead = urlStream.read(b);
if (numRead != -1) {
String newContent = new String(b, 0, numRead, charSet);
content += newContent;
}
}
urlStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
}
在主函数MainActivity.java中,使用异步加载数据:
package com.lml.mykuaidi;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.Toast;
public class MainActivity extends Activity {
RadioButton rbSpinner, rbEditText;
Spinner spCompany;
EditText etCompany, etNum;
Button btnQuery;
int rbFlag = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findview();
setAdapter();
setListener();
}
private void findview() {
rbSpinner = (RadioButton) findViewById(R.id.rbSpinner);
rbEditText = (RadioButton) findViewById(R.id.rbEditText);
spCompany = (Spinner) findViewById(R.id.spCompany);
etCompany = (EditText) findViewById(R.id.etCompany);
etNum = (EditText) findViewById(R.id.etNum);
btnQuery = (Button) findViewById(R.id.btnQuery);
}
private void setAdapter() {
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);
spCompany.setAdapter(adapter);
}
private void setListener() {
rbSpinner.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
rbFlag = 1;
rbEditText.setChecked(false);
etCompany.setEnabled(false);
spCompany.setEnabled(true);
}
}
});
rbEditText.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
rbFlag = 2;
rbSpinner.setChecked(false);
etCompany.setEnabled(true);
spCompany.setEnabled(false);
}
}
});
btnQuery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String num = etNum.getText().toString().trim();
String code;
if (rbFlag == 1) {
String[] codes = getResources().getStringArray(R.array.ems_code);
code = codes[spCompany.getSelectedItemPosition()];
} else {
code = etCompany.getText().toString().trim();
if (code.equals("")) {
Toast.makeText(MainActivity.this, "快递公司不能为空", Toast.LENGTH_SHORT)
.show();
}
}
AsyTask task = new AsyTask(MainActivity.this);
task.execute(code, num);
}
});
}
class AsyTask extends AsyncTask<String, Integer, String> {
int i;
Context mContext;
ProgressDialog mDialog = null;
public AsyTask(Context context) {
mContext = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
i = 1;
mDialog = new ProgressDialog(mContext);
mDialog.setMessage("Please wait...");
mDialog.setCancelable(false);
mDialog.show();
}
@Override
protected String doInBackground(String... arg0) {
Util util = new Util();
String res = util.getData(arg0[0], arg0[1]);
return res;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result != null && !result.equals("")) {
Intent intent = new Intent(mContext, DataShowActivity.class);
Bundle bundle = new Bundle();
bundle.putString("data", result);
intent.putExtras(bundle);
startActivity(intent);
} else {
Toast.makeText(mContext, "连接错误!", Toast.LENGTH_SHORT).show();
}
mDialog.dismiss();
}
}
}
现实结果界面DataShowActivity.java如下:
package com.lml.mykuaidi;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.TextView;
public class DataShowActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kuaidi_info);
String url= getIntent().getStringExtra("data");
WebView wvData=(WebView)findViewById(R.id.wvData);
wvData.getSettings().setDefaultTextEncodingName("utf-8") ;
wvData.getSettings().setJavaScriptEnabled(true);
String content ="<html><body><iframe name=\"kuaidi100\" src=\""+url+"\" width=\"600\" height=\"380\" "
+ "marginwidth=\"0\" marginheight=\"0\" hspace=\"0\" vspace=\"0\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html>";
wvData.loadDataWithBaseURL(null,content, "text/html", "UTF-8",null) ;
}
}
这是一个简单的demo,具体源码见附件。
- MyKuaiDi.rar (1.3 MB)
- 下载次数: 10
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 987使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 749java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 608我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 587Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 527先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 642相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 852参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 402图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 461参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2649今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 555由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2114Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 614最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 676以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 471参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 424参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1236参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2380参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 642http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 612用代码简单介绍下自定义控件的使用: 先看主activity: ...
相关推荐
快递100API:APICode URL支持的快递公司及参数说明;利用APICode URL创建快递查询程序的整体步骤,APICode URL使用说明;API URL使用说明,效果演示、开发示范和插件支持
本项目是一款基于快递100接口的快递查询系统设计源码,包含41个文件,主要由40个PHP文件...系统利用快递100的免费API接口,实现了实时快递查询、快递信息推送、云打印、电子面单等功能,适用于商家寄件和C端寄件场景。
本文将深入探讨“快递鸟API快递查询接口ASP版本”,这是针对ASP(Active Server Pages)开发的一种实现,使得开发者能够轻松地在ASP环境中集成快递查询功能。 快递鸟是一家专注于物流信息化服务的公司,提供了丰富...
快递鸟api,查询物流,nodejs实现
在快递查询场景中,API通常是提供给开发者使用的接口,使得他们能够调用特定的函数或方法来查询快递的状态,如包裹的当前位置、是否已签收等。 快递查询接口API通常会支持多种快递公司,包括但不限于顺丰、圆通、...
使用快递查询API可以带来以下优势: 1. 提升用户体验:用户无需离开购物平台就能查看快递状态,减少了用户的操作步骤,提高了满意度。 2. 数据同步:API可以实时更新快递信息,避免了手动输入或定期刷新的麻烦。 3. ...
快递100是一家提供快递查询服务的平台,它提供了丰富的API接口供开发者使用。在小程序中,我们可以利用这些API接口,通过HTTP请求获取物流信息。首先,你需要在快递100官网注册开发者账号并申请API密钥,这个密钥会...
本文将深入探讨物流API的概念、工作原理以及如何使用相关文件进行快递单号查询。 首先,我们需要理解什么是物流API。API(Application Programming Interface)是软件系统之间进行交互的一种协议,它定义了不同应用...
在本文中,我们将深入探讨快递查询API的工作原理、常见功能、使用场景以及如何进行集成。 首先,让我们理解什么是API。API,全称为Application Programming Interface,是一组规定和协议,用于软件之间交互。在快递...
在IT行业中,快递查询接口API是一种非常实用的服务,它允许开发者通过编程的方式获取快递物流信息。在这个特定的案例中,我们关注的是一个基于ASP(Active Server Pages)的免费快递查询接口。ASP是一种由微软开发的...
在使用"快递查询接口API"时,开发者首先需要了解API的文档,其中包括了接口的URL、请求方法(通常是GET或POST)、需要传递的参数(比如运单号)、以及返回的数据格式(可能是JSON或XML)。开发者需要在自己的应用...
在本案例中,提供的API是针对ASP和PHP两个编程语言版本的,这意味着开发者可以使用这两种语言来调用接口,实现快递信息的查询。 API(Application Programming Interface)是一组预定义的规则和协议,用于构建软件...
全国快递查询 API 支持多家主流快递公司的物流追踪,如圆通、高铁速递、中通快递、申通快递、百世快递(原汇通)、韵达快递和顺丰速运。 要使用这个 API,首先需要在 APISpace 的官方网站上订阅服务。订阅链接为:...
Features提供了快递100接口请求参数实体类、返回实体类。提供测试类调试。支持maven、gradle引入Getting startedjava-demo使用和测试可参考。# git clone https://github.com/kuaidi100-api/java-demo.gitAdd Config...
在本文中,我们将深入探讨如何使用PHP调用快递100API来获取并处理JSON返回值,以便在前端展示实时的物流状态。首先,我们需要理解快递100API的工作原理和参数设置。 快递100API是一个接口服务,允许开发者通过发送...
用asp来实现的kuaidi100.com的快递查询接口,可以查询他们支持的快递公司的信息,包括带验证码的,网上找了好久都没找了,自己搞个啦,代码不好,献丑了! ● APICode URL 返回验证码的图片,支持所有快递公司,返回...
快递100是一个知名的在线快递查询服务,提供了丰富的API接口供开发者使用。这个插件利用了这些接口,允许用户通过输入快递单号来查询包裹的实时状态。快递100的API通常会返回包裹的最新位置、派送状态、预计到达时间...
开发者可以使用类似的方法,在不同语言环境中调用这个API,并根据返回的数据生成动态的物流跟踪界面,为用户提供实时的快递状态查询服务。需要注意的是,确保在处理JSON数据时使用正确的编码(如UTF8),以避免解码...
快递100企业版快递查询接口(API)技术文档2020.03.11详细介绍了如何集成和使用该第三方物流查询服务。这个API主要用于电子商务和其他需要实时跟踪包裹状态的应用场景,允许开发者通过调用接口获取快递信息,提高...