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