由于WebService 是一种基于SOAP 协议的远程调用标准,而Android SDK 没有提供调用WebService 的库, 在Android平台调用Web Service 需要依赖于第三方类库ksoap2。
对AsyncTask的简要说明:
使用方法如下:
public JSONObject getWebService() throws Exception{
String ServerUrl = "WebService地址";
String NameSpace = "WebService命名空间";
String methodName = "WebService方法名";
SoapObject soapObject = new SoapObject(NameSpace, methodName);
soapObject.addProperty("参数名", "参数值");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
HttpTransportSE httpTranstation = new HttpTransportSE(ServerUrl);
httpTranstation.call(NameSpace + methodName, envelope);
Object result = envelope.getResponse();
String data = (String) result.toString();
JSONObject jsonObject = new JSONObject(data);
return jsonObject;
}
Android在主线程进行网络访问时,为了防止主线程阻塞,需要使用异步处理。Android提供了一个轻量级的类,即AsyncTask,使用如下:
private class AsynWebservice extends AsyncTask<String, Void, JSONObject> {
@Override
protected JSONObject doInBackground(String... params) {
JSONObject data = null;
try {
data = getWebService();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
@Override
protected void onPostExecute(JSONObject result) {
if (result == null)
return;
try {
//获取数据后的操作
} catch (JSONException e) {
e.printStackTrace();
}
}
}
获取数据使用:
new AsynWebservice().execute();
对AsyncTask的简要说明:
AsyncTask定义了三种泛型类型 Params,Progress和Result。
1、Param:启动任务执行时输入的参数。
2、Progress:后台任务执行的百分比。
3、Result:后台执行任务最终返回的结果,比如上面的JSONObject。
使用AsyncTask 最少要重写以下这两个方法:
1、doInBackground(Params…):后台执行,比较耗时的操作都放在这里。注意:这里不能直接操作UI。
2、onPostExecute(Result) :在这里面可以使用在doInBackground 得到的结果及操作UI。
有必要的话你还可以重写以下这三个方法:
1、onProgressUpdate(Progress…) :用于显示任务执行的进度,可以使用进度条增加用户体验度。
2、onPreExecute() :任务开始执行之前调用。
3、onCancelled() :任务取消以后调用。