public class UserLoginTask extends AsyncTask {
@Override
protected Boolean doInBackground(String... params) {
// TODO: attempt authentication against a network service.
//set webservices attribute
/***********************************************/
//创建HttpTransportSE对象,该对象用于调用WebService操作
ht = new HttpTransportSE(SERVICE_URL);
ht.debug = true;
//创建SoapSerializationEnvelope对象,它是HttpTransportSE调用WebService时消息
//的载体;客户端需要传入的参数,需要通过SoapSerializationEnvelope对象的bodyOut属性
//传给服务器;服务器响应生成的SOAP消息也通过该对象的bodyIn属性来获取。
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//指明SOPA规范
//创建SoapObject对象,创建对象时需要传入调用Web Service的命名空间、方法名。
soapObject = new SoapObject(SERVICE_NS, methodName);
/************************************************************/
//SoapObject 对象的addProperty(String name,Object value)方法将参数传递给服务端
//该方法的name参数指定参数名;value参数指定参数值。
//如果方法存在多个参数,多次调用addProperty即可。
soapObject.addProperty("userName",params[0]);
soapObject.addProperty("password",params[1]);
envelope.bodyOut = soapObject;
//设置WebService的开发类型
envelope.dotNet = true;
try
{
//调用远程WebService,call()方法的参数意义 第一个参数:命名空间+方法名,
//第二个参数:SoapSerializationEnvelope对象
ht.call(SERVICE_NS+methodName, envelope);
if(envelope.getResponse()!=null)
{
//SoapSerializationEnvelope对象的bodyIn属性返回一个SoapObject对象,
//该对象就代表了WebService的返回消息。
//WebService在服务器端返回值是String类型的数值的时候使用Object代替SoapObject
SoapObject result = (SoapObject)envelope.bodyIn;
Object detail1 = (Object) result.getProperty(0);
return detail1.toString().equals("true");
}
return false;
}
catch (IOException e)
{
e.printStackTrace();
}
catch (XmlPullParserException e) {
// TODO: handle exception
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
finish();
} else {
mPasswordView
.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();//设置密码框获得焦点
}
}
@Override
protected void onCancelled() {
mAuthTask = null;
showProgress(false);
}
}