Android中 调用WebService详解 ksoap2-android

原创 2013年12月05日 13:01:07

首先下载ksoap2-android jar包,下载地址为:https://code.google.com/p/ksoap2-android/

在项目下面建立一个libs文件夹,将刚刚下载的jar包放进去,再将其加入到工程的Build Path中



1. 布局文件/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" 
    android:layout_margin="0px"
    android:padding="0px">
    <TextView
         
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="用户登录"
        android:textColor="#3f8f3f"
        android:textSize="30sp"/>

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:stretchColumns="0,3" >

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:gravity="center" >

            <TextView />

            <TextView
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:gravity="left|center_vertical"
                android:text="用户名:"
                android:textColor="#3f8f3f"
                android:textSize="20sp" />

            <EditText
                android:id="@+id/username"
                android:layout_width="160dp"
                android:layout_height="38dp"
                android:gravity="left|center_vertical"
                android:textColor="#3f8fff"
                android:textSize="18sp" />

            <TextView />
        </TableRow>

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:gravity="center" >

            <TextView />

            <TextView
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:gravity="left|center_vertical"
                android:text="密  码:"
                android:textColor="#3f8f3f"
                android:textSize="20sp" />

            <EditText
                android:id="@+id/password"
                android:layout_width="160dp"
                android:layout_height="38dp"
                android:inputType="textPassword"
                android:gravity="left|center_vertical"
                android:textColor="#3f8fff"
                android:textSize="18sp" />

            <TextView />
        </TableRow>
    </TableLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal"
        android:layout_marginTop="10dp">

        <Button
            android:id="@+id/btn1"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginRight="10dp"
            android:gravity="center"
            android:text="登录"
            android:textColor="#3f8f3f" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="80dp"
            android:layout_height="35dp"
            android:layout_marginLeft="10dp"
            android:gravity="center"
            android:text="注册"
            android:textColor="#3f8f3f" />
    </LinearLayout>

</LinearLayout>

效果图:



2.编写类MainActivity.java

package com.bibi.webservice;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.text.Editable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	private EditText username;
	private EditText password;
	private Button btn1;
	private Button btn2;
	
	

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		username=(EditText) findViewById(R.id.username);
		password=(EditText) findViewById(R.id.password);
		btn1=(Button) findViewById(R.id.btn1);
		btn2=(Button) findViewById(R.id.btn2);
		
		btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String uname=username.getText().toString().trim();
				String upass=password.getText().toString().trim();
				if(validate(uname, upass)){
					if(login(uname, upass)){
						Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
						show_Dialog("登陆成功");
					}else{
						Toast.makeText(MainActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();
						show_Dialog("登录失败");
					}
				}
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	public boolean login(String username, String password) {
		boolean result = false;
		//1.创建HttpTransportSE对象,该对象用于调用Web Service操作
		HttpTransportSE htse = new HttpTransportSE("http://192.168.137.1:8080/WebServiceTest/UserDAOPort?wsdl");
		htse.debug = true;
		//2.使用SOAP1.1协议创建Envelope对象
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//3.创建SoapObject对象,该对象需要传入Web Service的命名空间、方法名
		SoapObject request = new SoapObject("http://dao.bibi.com/", "login");
		//4.设置传给WebService的参数
		request.addProperty("arg0", username);
		request.addProperty("arg1", password);
		//5.将SoapObject设置为Envelope的传出SOAP消息体
		envelope.bodyOut=request;
		//6.调用HttpTransportSE对象的call方法,并将Envelope做为参数,调用远程Web Service
		try {
			//调用WebService
			htse.call(null, envelope);
			if (envelope.getResponse() != null) {
				//7.获取服务器响应返回的SOAP消息体
				SoapObject response = (SoapObject) envelope.bodyIn;
				
				Log.i("====response====", response.toString());
				//====response====  loginResponse{return=true; }
				SoapPrimitive sp = (SoapPrimitive) response.getProperty(0);
				Log.i("====getProperty====", response.getProperty(0).toString());
				//====getProperty====  true
				Log.i("====sp====", sp.toString());
				//====sp====  true
				
				if(("true").equals(sp.toString())){
					result = true;
				}
			}
		} catch (IOException ioe) {
			Log.i("==dddddd=",ioe.getMessage());
			ioe.printStackTrace();
		} catch (XmlPullParserException xppe) {
			Log.i("==dddddd123=",xppe.getMessage());
			xppe.printStackTrace();
		}
		return result;
	}
	
	
	public void show_Dialog(String msg){
		AlertDialog.Builder dialog =new AlertDialog.Builder(this);
		dialog.setTitle(msg);
		dialog.setCancelable(true);
		dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "点击了确定", Toast.LENGTH_SHORT).show();
			}
		});
		
		dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "点击了取消", Toast.LENGTH_SHORT).show();
			}
		});
		//dialog.show();
		
		AlertDialog alert=dialog.create();
		alert.show();
	}
	
	public boolean validate(String username,String password){
		if(username.equals("")){
			show_Dialog("用户名不能为空!");
			return false;
		}
		
		if(password.equals("")){
			show_Dialog("密码不能为空!");
			return false;
		}
		return true;
	}


}

3.访问网络的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bibi.webservice"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.bibi.webservice.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

在调用某些WebService时,可能在第87行代码中,htse.call(null, envelope);

调用WebService时并不需要传入soapAction,将其置为null即可。




相关文章推荐

Android之ksoap2-android详解与调用天气预报Webservice完整实例

Google为Android平台开发Web Service客户端提供了ksoap2-android项目,在这个网址下载开发包http://code.google.com/p/ksoap2-androi...

Android调用WebService(ksoap2 天气预报)

WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库...
  • Qiqihar
  • Qiqihar
  • 2012年04月10日 11:35
  • 2100

Android使用Json和ksoap2调用WebService(WCF)

自我介绍:本人C#程序猿,有一颗想学Android的心,在做到将Android Sqlite中的数据上传到远程服务器,自然而然的想到用C# 的WCF将数据插入到SQL,以下代码花了本猿猴1个星期的时候...

android使用ksoap2调用webservice接口实现电话号码查询功能

最近在研究android调用webservice接口的问题,在网上查找了很多资料,现在把自己的整理出来分享一下,感谢其他一些开源的朋友,提供了很多的帮助 首先来看一下活动类的布局文件main.xml...

Android使用ksoap2调用C#中的webservice函数方法

Android使用ksoap2调用C#中的webservice函数方法 一:webService简介 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webser...

android 用ksoap2调用webservice的方法

Android 用ksoap2调用webservice的方法 Android 用ksoap2 调用webService 这个问题相信困扰了很多人,网上的教程虽然很多,但经过本人的...
  • dhbsdsg
  • dhbsdsg
  • 2012年08月08日 12:13
  • 428

Android 的网络编程(5)-通过ksoap2调用webservice示例

package com.study.ws;   import java.io.IOException;   import org.ksoap2.SoapEnvelope;   import org.k...

Android使用ksoap2调用webservice

Android使用ksoap2调用webservice,使用网上公开的免费接口测试,介绍了如何下载导入ksoap2,以及如何使用AsyncTask调用接口的过程...

一个ksoap2-android调用webService的封装库

WebService 基本概念 WebService是一种基于SOAP协议的远程调用标准,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK没有直接调...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中 调用WebService详解 ksoap2-android
举报原因:
原因补充:

(最多只允许输入30个字)