zoukankan      html  css  js  c++  java
  • Android 使用 ksoap2-android 访问WebService(C#)

    Android 客户端与后台数据交互的方式有很多种。今天这里记录一下,与WebService的数据交互。
    新建一个简单的WebService 创建方式如下:

    QQ截图20160406083930

    QQ截图20160406084034

    创建好的项目是这样的。

    QQ截图20160406084208

    我们在里面写几句简单的代码,如下:


    QQ截图20160406085153

    这样,我们的WebService就写好了,接下来我们进行发布。右击项目,选择发布。

    image

    选择文件系统,这里我直接发布到本地IIS里面了。

    QQ截图20160406085907

    这样就发布结束了,接下来,我们直接打开本地 IIS。

    QQ截图20160406090102

    右击login.asmx。点击浏览就可以在默认浏览器中打开了。

    QQ截图20160406090504

    QQ截图20160406093302

    这样我们的WebService就结束了。接下来是Android 客户端了。
    这里我们首先需要一个jar包。这里我用的是 kSOAP2  下载地址: http://www.oschina.net/p/ksoap2+android
    下载之后,我们直接把jar包放到libs里,然后右击,在弹出菜单中点击Add As Library.

    QQ截图20160406091455然后弹窗,点击确定就好了。QQ截图20160406091502

    下面我们开始写代码。
    先写了一个简单的布局页面。

    QQ截图20160406091759

    代码如下:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">


    <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:hint="Account"
    android:ems="10"
    android:id="@+id/AccounText"
    android:layout_marginTop="34dp"
    android:layout_alignParentTop="true"
    android:layout_alignStart="@+id/PwdText" />

    <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:hint="Password"
    android:ems="10"
    android:id="@+id/PwdText"
    android:layout_marginTop="24dp"
    android:layout_below="@+id/AccounText"
    android:layout_centerHorizontal="true" />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="登录"
    android:id="@+id/button"
    android:layout_below="@+id/PwdText"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="36dp" />

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="内容"
    android:id="@+id/textView"
    android:layout_below="@+id/button"
    android:layout_marginTop="24dp"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true" />
    </RelativeLayout>
    然后是主Activity 代码如下:

    下面代码中有几个注意点 NAMESPACE、MYURL、METHODNAME。其中NAMESPACE 对应上面我们WebService命名空间,我这里是默认的命名空间。

    MYURL 对应的地址不止当前WebService 的地址,而是引用方法的具体地址 上面已经说过了。METHODNAME  是调用的方法名

    package com.example.administrator.login1;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;


    public class MainActivity extends Activity {

    private EditText accountet,pwdet;
    private Button loginbtn;
    private TextView textView;
    private myHandler myHandler =new myHandler();

    private final String

    NAMESPACE

    ="http://tempuri.org/";                               //WebService 服务器命名空间
    private final String

    MYURL

    ="http://172.18.216.7/login/login.asmx";    //方法的详细地址
    private final String

    METHODNAME

    ="login1";                                            //具体的方法名称


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();

    //登录按钮
    loginbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    new Thread(new Runnable() {
    @Override
    public void run() {

    try {
    SoapObject request = new SoapObject(

    NAMESPACE,METHODNAME

     );

    request.addProperty("name", accountet.getText().toString());
    request.addProperty("pwd", pwdet.getText().toString());

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.bodyOut = request;
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE ht = new HttpTransportSE(

    MYURL

    );



    ht.call(

    NAMESPACE+METHODNAME

    , envelope);
                                //返回对象应为Object 否则会出现转换异常错误

    Object

     soapObject = (

    Object

    ) envelope.getResponse();

                                //发送消息更新UI

    Message msg2 = new Message();
    Bundle bundle = new Bundle();
    bundle.putString("result", soapObject.toString());
    msg2.what = 1;
    msg2.setData(bundle);
    myHandler.sendMessage(msg2);

    }catch (Exception e) {
    Log.e("lyf",e.toString());
    e.printStackTrace();
    }
    }
    }).start();
    }
    });
    }

    private void initView()
    {
    accountet= (EditText) this.findViewById(R.id.AccounText);
    pwdet= (EditText) this.findViewById(R.id.PwdText);
    loginbtn = (Button) this.findViewById(R.id.button);
    textView= (TextView) this.findViewById(R.id.textView);
    }

    class myHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case 1:
    //更新TextView 显示返回结果
    textView.setText(msg.getData().getString("result"));
    break;
    }

    super.handleMessage(msg);
    }
    }
    }
  • 相关阅读:
    jquery 功能优化
    MySQL Group Replication集群部署,基于官方文档
    django-filter跨表过滤,区间过滤
    xadmin默认显示用户名,密码,确认密码,添加字段
    函数的装饰器修复技术(@wraps)
    redis的特点总结-安装及基本命令的使用
    前后台分离时-后台处理跨域
    djangorestframework-jwt模块
    drf模块请求组件,响应组件,异常组件
    html 中画半圆的方法
  • 原文地址:https://www.cnblogs.com/Jett/p/5357973.html
Copyright © 2011-2022 走看看