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

首先我先把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 在这里做下记录 希望大家不吝赐教。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值