- 浏览: 182382 次
- 性别:
- 来自: 浙江
文章分类
最新评论
现在一些物流公司支持移动设备查询,这里我简单写了个项目。
我的快递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 943使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 727java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 535我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 553Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 494先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 610相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 815参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 380图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 432参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2600今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 528由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2083Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 587最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 631以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 436参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 398参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1171参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2349参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 614http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 585用代码简单介绍下自定义控件的使用: 先看主activity: ...
相关推荐
快递100API:APICode URL支持的快递公司及参数说明;利用APICode URL创建快递查询程序的整体步骤,APICode URL使用说明;API URL使用说明,效果演示、开发示范和插件支持
快递鸟api,查询物流,nodejs实现
物流API 快递单号查询
目前支持申通快递查询接口、圆通快递查询API、中通快递、韵达快递、汇通快递、EMS快递、顺丰快递、天天快递、宅急送快递等国内常见快递,同时也支持TNT快递、FedEx快递、DHL快递、UPS快递等国外常见快递的查询服务...
官网上没有ASP版本的,自己写的,快递鸟API快递查询接口ASP版本,在快递鸟的官网上申请注册,实名认证后得到ID,AppKey后可以查询到快递信息。
Features提供了快递100接口请求参数实体类、返回实体类。提供测试类调试。支持maven、gradle引入Getting startedjava-demo使用和测试可参考。# git clone https://github.com/kuaidi100-api/java-demo.gitAdd Config...
支持绝大部分主流的快递公司单号状态查询接口API,免费使用,这是PHP的。
php调用快递100api示-json返回值.docx
用asp来实现的kuaidi100.com的快递查询接口,可以查询他们支持的快递公司的信息,包括带验证码的,网上找了好久都没找了,自己搞个啦,代码不好,献丑了! ● APICode URL 返回验证码的图片,支持所有快递公司,返回...
快递查询API WEB 开发应用 快递公司运单查询接口
电商网站、在线管理系统、微信公众号平台等都能集成使用,免费查询国内外三百多家快递及物流公司的快递单号,稳定性超强,无限制哦!!! 说明: 1.KuadidiAPI.php 不需要修改改任何东西 2.example.php 按照说明...
支持绝大部分主流的快递公司,单号状态查询API接口。asp版本,免费使用。
php调用快递100api示-json返回值
快递查询API详解,看了之后你肯定会大有收获
简单的调用快递100官方api,通过订单号查询物流信息,完整代码
国内快递接口API,ASP/PHP版本
本项目是基于C#的快递100接口API查询设计源码,包含89个文件,主要文件类型为cs、gitignore、csproj和md。该项目适用于快递100接口API的开发和设计,为用户提供了一个丰富的资源库,包含多种文件类型,方便进行快递...
快递100查询快递物流信息API接口,内涵java、php调用接口源码示例。
C#快速实现快递物流轨迹查询功能,调用快递鸟快递查询API实现