1.创建安卓项目KSoapTest

2.一路Next
3.添加ksoap2-android-assembly-3.1.0-jar-with-dependencies.jar到项目
(稍后的完整项目下载后会包含这个jar包)
4.编辑 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_below="@+id/textView1"        android:layout_marginTop="56dp"        android:text="点击访问服务端HelloWorld" />    <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentTop="true"        android:layout_centerHorizontal="true"        android:layout_marginTop="86dp"        android:text="TextView" />RelativeLayout>

5.添加基类Activity类:BaseKsoapActivity.java,代码如下:

package com.example.base;import java.util.Iterator;import java.util.Map;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.AsyncTask;import android.os.Bundle;/** *  * @author WangPeng * 2015年8月7日11:24:49 * 集成该类的Activity可以方便的调用Web Service进行通信 * */@SuppressWarnings("all")public abstract class BaseKsoapActivity extends Activity{    // 服务器链接    final String WEB_SERVICE_URL = "http://%s/TestService.asmx?wsdl";    // 命名空间    final String Namespace = "http://tempuri.org/";    //服务器地址    private String ipAddress;    /**     * Activity 创建时候执行     * 获取Web Service所在服务器地址     */    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //IP地址可以通过配置来获得        //注意:不能使用127.0.0.1或localhost,因为安卓程序是在手机上运行的,手机不能通过127.0.0.1或localhost访问电脑上的IIS        //这里我使用的是我电脑的无线网卡的IP地址,我的手机也连接在这个无线网上        this.ipAddress = "192.168.20.133";    }    /**     *      * @param paras     */    protected void Request(Object... paras) {        new AsyncTask() {                       @Override            protected SoapObject doInBackground(Object... args) {                // 1、指定Web Service的命名空间和调用的方法名                String MethodName = (String) args[0];                SoapObject request = new SoapObject(Namespace, MethodName);                //2、设置调用传递的参数                Map paras = (Map) args[1];                // 2、设置调用方法的参数值,如果没有参数,可以省略,                if (paras != null) {                    Iterator iter = paras.entrySet().iterator();                    while (iter.hasNext()) {                        Map.Entry entry = (Map.Entry) iter.next();                        request.addProperty((String) entry.getKey(), (String) entry.getValue());                    }                }                // 3、生成调用Web Service方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);                envelope.bodyOut = request;                // c#写的应用程序必须加上这句                envelope.dotNet = true;                HttpTransportSE ht = new HttpTransportSE(String.format(WEB_SERVICE_URL, ipAddress));                // 使用call方法调用WebService方法                try {                    ht.call(null, envelope);                                    } catch (Exception e) {                    publishProgress("网络错误", "网络连接失败,请检查设备是否处于联网状态,并且已配置服务器地址。");                    return null;                }                try {                    SoapObject obj = (SoapObject) envelope.bodyIn;                    return obj;                } catch (Exception e) {                    publishProgress("网络错误", "服务器端返回结果");                    return null;                }            }            @Override            protected void onPostExecute(SoapObject obj) {                super.onPostExecute(obj);                requestCallBack(obj);            }            @Override            protected void onProgressUpdate(Object... values) {                super.onProgressUpdate(values);                if (values != null && values.length == 2) {                    ShowMessage((String) values[0], (String) values[1]);                }            }        }.execute(paras);    }    protected void ShowMessage(String title, String msg) {        new AlertDialog.Builder(this).setTitle(title).setMessage(msg).setPositiveButton("OK", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {            }        }).show();    }    /**     * 所有继承这个Activity的类都必须实现这个方法     * 每次通信结束都会调用这个方法     *      * @param obj 和服务器通信得到的返回值     */    protected abstract void requestCallBack(SoapObject obj);}

6.编辑MainActivity,继承上面的BaseKsoapActivity,代码如下:

package com.example.ksoaptest;import java.util.HashMap;import java.util.Map;import org.ksoap2.serialization.SoapObject;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.example.base.BaseKsoapActivity;public class MainActivity extends BaseKsoapActivity {    private Button btn;    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn = (Button)findViewById(R.id.button1);        tv = (TextView)findViewById(R.id.textView1);        btn.setOnClickListener(new OnClickListener() {                      @Override            public void onClick(View arg0) {                Map paras = new HashMap();                //paras.put("参数名","参数值");                Request("HelloWorld", paras);                           }        });    }    @Override    protected void requestCallBack(SoapObject obj) {        //复杂一点的返回值需要解析,我们这里返回的是String,所以解析比较简单        //对于复杂的返回类型,个人建议在服务端转换成JSON字符串后返回,        //这样客户端只要得到这个字符串扔给第三方的Gson或jsonlib就可以转换成需要的对象        //而且对于byte数组这样的返回值通过xml传输会加上很多无用的标签,增加了传输的数据量,降低效率        tv.setText(obj.getProperty(0).toString());          }}

7.在AndroidManifest.xml添加网络权限:

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

8.运行

9.C#和安卓完整代码已上传
http://download.csdn.net/detail/u013816347/8999889

欢迎评论指正

更多相关文章

  1. 万字长文带你了解最常用的开源 Squid 代理服务器
  2. Android实现信号强度监听的方法
  3. android配置开发环境
  4. 禁止应用获取手机信息
  5. android中返回页面并刷新
  6. 源码分析android 系统framework(一)之Activity 与 Window 与 View
  7. Android(安卓)TabLayout 不显示标题的解决方法
  8. Android开发指南(39) —— Testing Fundamentals
  9. LogCat中不输出任何的信息

随机推荐

  1. Android开发学习笔记——对话框Dialog
  2. Android系统版本及其屏幕适配
  3. Android(安卓)Fragment 基本了解
  4. Android(安卓)设置全屏和无标题模式
  5. Android中Service和IntentService
  6. Android(安卓)ImageView ScaleType
  7. android学习----通过android帮助,学习Text
  8. android源码下载-Windwos下使用清华镜像
  9. Android(安卓)使用XML隐藏ActionBar中遇
  10. Ubuntu 16.04 64bit 编译 Android(安卓)4