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"; //方法的详细地址
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);
}
}
}
Android 使用 ksoap2-android 访问WebService(C#)的更多相关文章
-
在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决
ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul. ...
-
在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}
最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web se ...
-
Android实现KSOAP2访问WebService
Android实现KSOAP2访问WebService 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 写一个工具类来给主界面使用,作用是使用 ...
-
Android使用KSOAP2调用WebService及正确导入jar包的问题(转)
Android使用KSOAP2调用WebService及正确导入jar包的问题(转) 错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代 ...
-
【转载】Android通过ksoap2调用.net(c#)的webservice
转载自:http://www.cnblogs.com/badtree/articles/3242842.html ■下载 ksoap2-android 包 去http://code.google.co ...
-
Android访问WebService的两种方法
首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.详细见:http://baik ...
-
android 使用Ksoap2工具类实现WebService网络编程
1.下载Ksoap2,将jar包拷贝到libs目录下.然后右键点击拷贝进来的jar,在弹出菜单中点击Add As Library. 2.在AndroidManifest.xml中添加访问网络的权限 & ...
-
Android使用ksoap2调用C#中的webservice实现图像上传
目录: 一. android使用ksoap2调用webservice 二. 异步调用 三. Android使用ksoap2调用C#中的webservice实现图像上传参考方法 四. 图像传输中Base ...
-
Android局域网访问webservice以及其中的一些问题
应老师的要求,要做个安卓app,实现备份app上的数据到服务器上的mongodb上,网上搜了下相关的实现方式.利用webservice技术,具体来说就是客户端直接调用服务器端的接口.之前从来没接触这玩 ...
随机推荐
-
鼠标拖动在picturebox上画圆时
注意MouseDown MouseMove MouseUp三个事件: MouseMove事件中要实现实时绘制和下次绘制时自动清除重绘 需要: pictureBox1.Invalidate(); pi ...
-
ov5640摄像头设备驱动
http://www.cnblogs.com/firege/p/5806121.html (驱动大神) http://blog.csdn.net/yanbixing123/article/detai ...
-
window7下使用vagrant打造lamp开发环境(二)
上一节我们基本把软件跟系统环境,以及连接虚拟机给配置好了,下面我们将要进行开发环境的搭建(lamp) 这里安装其实很简单,因为我们用的centos,所以很大一部分安装都是通过yum安装 关于yum的详 ...
-
strcmp的实现
注意,*str1++和*str2++最好不要写在while判断里,否则需要在return前再*str1-1,和*str2-1. int strcmp(const char *str1,const ch ...
-
We~ˇsay~~ˇ
拂弹每一个音符 与心相印 行走每一段风景 和路缠绵 花开的声音 只能用心倾听 无论曾经如何艰难 我依然在最初的起点 默念歌唱 等你 携手
-
android蓝牙4.0(BLE)开发之ibeacon初步
一个april beacon里携带的信息如下 ? 1 <code class=" hljs ">0201061AFF4C0002159069BDB88C11416BAC ...
-
为什么有时候必须添加sys.setdefaultencoding(&#39;utf-8&#39;)
今天在尝试Python的CGI模块时遇到中文字符不能正确显示的问题,很郁闷.在网上仔细找了找,终于解决了这个问题,现在将解决方法陈述如下,以防下次失误. 页面源代码如下 #-*- coding: ut ...
-
【Unity3D与23种设计模式】游戏的主循环——Game Loop
游戏与其他软件最大的不同 就是游戏有Update逻辑 一般的软件是由"事件"驱动 因为它不会突然跑出来一只"兔子" 因此,只有游戏才有"帧" ...
-
RabbitMQ性能优化
修改rabbitmq.config文件 rabbitmq.config文件时rabbitmq的配置文件,他遵守Erlang配置文件定义. rabbitmq.config文件位置: Unix $RABB ...
-
python enumrate使用
新接触了一个函数 enumrate ,很多情况下我们想获得可迭代的容器(例如dict.list.tuple等)元素的时候,想同时获得一个序号用以他用. 代码常常写成这个样子 list_a = [&qu ...