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显示提示信息。