Android 使用 ksoap2-android 访问WebService(C#)

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

创建好的项目是这样的。

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

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

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

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

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

这里的地址比较重要。

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

然后弹窗,点击确定就好了。

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

代码如下:
<?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?op=login1";    //方法的详细地址    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);        }    }}
时间: 2024-07-30 08:23:05

Android 使用 ksoap2-android 访问WebService(C#)的相关文章

在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}

最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web service中的一个serch()方法,然后发现,每次的返回值都是一个AnyType{},Logcat如图所示: 网上搜集了很多资料,产生的原因其实很简答,是因为服务端返回值为null,Logcat中显示的就职anyType{},找到了原因,解决起来也就好说了,其中包括这些方法: {解决方法引用自博客

android采用Ksoap2访问webservice,AndroidHttpTransport call方法异常

============问题描述============ 使用java工程以同样的方式去访问webservice没有任何问题,也返回正常的数据,但是在android中执行到call方法的时候就抛出异常,但是异常是null不能去取出正常的数据,代码如下,求各位大神指教一下 ============解决方案1============ 1.应用需要有访问网络的权限. 2. 4.0中不能再主线程中发起网络请求,这个坑我也坑了好久.

android 使用Ksoap2工具类实现WebService网络编程

1.下载Ksoap2,将jar包拷贝到libs目录下.然后右键点击拷贝进来的jar,在弹出菜单中点击Add As Library. 2.在AndroidManifest.xml中添加访问网络的权限 <uses-permission android:name="android.permission.INTERNET"/> <?xml version="1.0" encoding="utf-8"?> <manifest

Android使用KSOAP2调用WebService及正确导入jar包的问题(转)

Android使用KSOAP2调用WebService及正确导入jar包的问题(转)     错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代码,但是每次在Android模拟器中运行的时候程序都会崩溃,搞得自己都快崩溃了.... 查看了一下LogCat中的错误报告,发现是因为java.lang.NoClassDefFoundError导致程序崩溃的: view plainprint? ERROR/AndroidRuntime(600): 

Android 访问WebService

通过几个例子和自己的修改实现了Android访问WebService [1].[代码] [Java]代码 跳至 [1] [2] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6

Mono for android 访问Webservice和WebApi以及获取和解析JSON

先看效果,注意:(1)这里由于我的模拟器不支持中文输入,所以,对于这张效果图,我是直接在代码中写死了我的查询城市,在下面的代码中我是没有把要查询的城市写死的. (2)读者要想成功使用本示例的所有代码的话(就是一成不改,这也太懒了哈!),需要读者自己申请一个key,然后放入我的代码中,下面的代码注释中我也有说道,请认真观看. (3)改代码本人亲测可行,有图有真相. (4)本文全部原创,热烈欢迎广大网友分享本文,但请标明出处.也欢迎大家和我积极交流相关知识. 布局如大家所见,很简陋,我就不贴代码了哈

Android 开发笔记“调用.net webservice遇到的问题”

1.An exception occurred: org.ksoap2.SoapFault SoapFault - faultcode: 'soap:Server' faultstring: '服务器无法处理请求. ---> 未能加载文件或程序集“MySql.Data, Version=6.3.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项.系统找不到指定的文件.' faultactor: 'null' detail

Android基于ksoap2调用WCF服务(二):Android篇

上一篇通过一个非常简单的例子,完成了一个WCF的服务.接下来介绍一下Android端. Android端调用WCF,采用基于ksoap2包来实现. 下载地址(这个需要fan qiang访问,你们懂的):https://code.google.com/p/ksoap2-android/ 我用的3.3.0版本,我传到csdn上,上面地址如果不能访问,可以用这个地址:http://download.csdn.net/detail/cnryc/7695437 程序的源代码下载地址:http://down

使用Android Studio开发调用.NET Webservice 之初体验

本人是.NET出身 但苦于领导要让研究Android 外壳然后准备套html5  ,当试验兵真坑啊 但也没办法 咱还得研究啊,索性 不辜负领导的期望(也研究好两三天了)总算弄明白了 app本地存储 和 Android Studio 调用 Webservice  了,中间出现了好几处问题 ,自己也百度了好久 都没有解决我的问题,且它们那些答案都是复制粘贴下根本就没有测试可不可以 就贴出来了 这我就很气愤啊 下面为了给和我一样的新手和想研究的各位一点便利,把自己遇到的问题与如何解决分享下 以便自己也