2015-01-30 21:36:50|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Android, Java, 移动应用|来源:唯设编程网
Android不允许在主线程进行网络请求,所以我在新的线程的run函数完成我们的代码,KSoap使用HttpTransportSE向服务器发起情况,该对象的构造函数有两个参数,第一个是对应.asmx的完整地址,第二个参数是延时,发出请求使用HttpTransportSE的成员函数call完成,该函数第一个参数是执行的ACTION,第二个参数是封装了各种参数的SoapSerializationEnvelope对象,第三个参数是List类型的参数,可以发送请求的cookie参数,这样我们可以在多次请求之间共享session,这对应我们使用Session进行登录验证的项目中非常实用,请求返回以后,我们将对应的session参数保存在静态成员变量mSessionHeader中,供下次请求使用。返回内容我们使用SoapSerializationEnvelope对象的getResponse函数得到,在输入的Handler类型参数中完成消息的处理。
同时,为了正常访问网络,我们需要在AdroidManifest.xml中请求相应的权限,如下所示:
</application>
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
下面我们给出一个该函数的调用的测试例子:
//登录按钮
btn_login = (Button)findViewById(R.id.btn_login);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String URL = "/WebService/test_webService.asmx";
String METHOD_NAME = "login";
LinkedHashMap<String, Object> values = new LinkedHashMap<String, Object>();
values.put("userName",input_userName.getText().toString());
values.put("passWord", input_pass.getText().toString());
//发送请求
KSoap2Utility.doTransaction(URL, METHOD_NAME, values, getResources(),
new Handler() {
public void handleMessage(android.os.Message msg) {
//返回消息
String strMsg = msg.obj.toString();
if (strMsg.startsWith("登录成功")) {
//new 一个Intent对象,并指定要启动的class
Intent intent = new Intent();
intent.setClass(LoginActivity.this,
UserZoneActivity.class);
startActivity(intent);
LoginActivity.this.finish();
} else {
// 将WebService得到的结果返回给TextView
Toast.makeText(getApplicationContext(), msg.obj.toString(), Toast.LENGTH_LONG).show();
}
}
});
}
});
我们将登录按钮的点击监听器绑定了点击事件,将用户输入的用户名和密码作为参数,使用KSoap2调用test_webService.asmx中的login函数进行验证,验证成功启动用户中心对应的Activity,失败则使用Toast显示提示信息。