使用特快专递100api 快递查询

使用快递100api 快递查询
现在一些物流公司支持移动设备查询,这里我简单写了个项目。
我的快递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,具体源码见附件。