您的位置:首页 > 移动开发 > Android开发

Android调用.NET webservice实现用户登录验证

2015-12-11 23:17 513 查看
首先我先把WebService的地址写出来 这个Webservice是我自己写上传到服务器上的,大家可以直接调用来做测试。

http://shop.clovey.com.cn/AndroidZM.asmx?op=Login

这个Webservice连接的是我的数据库 在这里只实现了一个登录功能

传入的参数为name,password.

如果失败就返回

<string xmlns="http://tempuri.org/">{"Name":"Error"}</string>


成功的话返回

<string xmlns="http://tempuri.org/">{"Name":"常风"}</string>


账号为cxcx 密码为123456 欢迎大家做测试

调用WebSercive需要使用到Ksoap2这个jar包下载地址

下载解压之后得到ksoap2-android-assembly-3.1.0-jar-with-dependencies.jar这个jar包.

在这里我使用的是Android studio 2.0,将这个jar包放置在libs目录下,右键jar包选择Add As Library即可导入到项目中。

接下来开始书写代码。

首先记得 在AndroidManifest.xml 加入 允许访问 Internet

<uses-permission android:name="android.permission.INTERNET" />


接着定义几个常量,是我们接口的几个参数。

private static final String METHOD_NAME = "Login";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://shop.clovey.com.cn/AndroidZM.asmx";
final String SOAP_ACTION = "http://tempuri.org/Login";
private int flag=0;//返回值结果状态 0是登录失败 1是登录成功 2是调用失败(网络出错等各种原因)


METHOD_NAME是我们需要调用的方法名

NAMESPACE是命名空间名字

URL是我们接口的地址

SOAP_ACTION是我们SOAP协议的目的指向

这些都可以在WebService中找到。

接下来写一个Call()函数,里面调用SOAP2连接WebService.

public void call() {
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("name",username.getText().toString()); //这个是传递参数的.这是name参数
request.addProperty("password",password.getText().toString());//这是password参数
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;//这个标明是否是.NET的WebService
envelope.setOutputSoapObject(request);//设置请求参数
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);//指向URL
androidHttpTransport.call(SOAP_ACTION, envelope);//这是与WebService直接通信的方法
System.out.println("调用WebService成功");//打印调用成功
Object result =envelope.getResponse();//获取得到的值 在这里我们WebService返回的是JSon数据串
JSONObject jsonObject = null;//调用JSONObject类帮助我们解析json数据串
try{jsonObject = getJSON(result.toString());  }//得到Json对象
catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String names="";//返回值接受的参数
try {
names =jsonObject.getString("Name");//取返回值
if(names.equals("Error"))
{
//如果登录失败则不做改变
}
else flag=1;//登录成功
}
catch (JSONException e) {
flag =2;//产生异常
}
} catch (Exception e) {
System.out.println(e.getMessage());
flag =2;//产生异常
Toast.makeText(LoginActivity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
public JSONObject getJSON(String sb) throws JSONException {
return new JSONObject(sb);
}


Call()方法写好了 接下来我们去调用

在这里我们就不写具体调用的过程 设置一个Listener

case R.id.Login:
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
call();
handler.sendEmptyMessage(0);
}
}).start();
break;


这是其中的一部分代码 当case登录按钮点击时 new一个新线程实现call()方法并向handler发送信息。

!!!!注意:

必须要new一个新线程去进行网络连接 不然会报错 而且没有错误提示信息。

Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(flag==0)
{
Toast.makeText(LoginActivity.this,"账号名或密码错误,请重新输入!",Toast.LENGTH_SHORT).show();
}
else if(flag==2)
{
Toast.makeText(LoginActivity.this,"网络连接超时!",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(LoginActivity.this,"登录成功!欢迎登录:"+txtWeather,Toast.LENGTH_SHORT).show();
}
}
};


这是Handler的实现

这样我们的WebService就调用成功了

这是最简单的WebService 在这里做下记录 希望大家不吝赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息