`

【android】web service访问

 
阅读更多
android对web service的访问。使用ksoap2-android外部jar。
首先下载jar,附件就是。
加入到libs包中,然后加入classpath。

对客户端服务端web service进行编程。
提供最简单的login。
@WebService(name = "Login", targetNamespace = "http://li.duduli.com/")
public interface Login {
	@WebMethod(operationName = "log", action = "urn:Log")
	public String log(@WebParam(name = "arg0") String name,@WebParam(name = "arg1") String password);
}


@WebService(targetNamespace = "http://li.duduli.com/", endpointInterface = "com.duduli.li.Login", portName = "LoginImplPort", serviceName = "LoginImplService")
public class LoginImpl implements Login {
	@Override
	public String log(String name, String password) {
		// TODO Auto-generated method stub
		if("duduli".equals(name) && "wiki".equals(password)){
			System.out.println("success");
			return "success";
		}else{
			System.out.println("failure");
			return "failure";
		}
	}
}



其后为android客户端编程。
提供布局文件
<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" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/userName"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="UserName" />

    <EditText
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/userName"
        android:layout_marginTop="28dp"
        android:text="PassWord" />

    <EditText
        android:id="@+id/passWord"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView3"
        android:layout_alignBottom="@+id/textView3"
        android:layout_alignParentRight="true"
        android:ems="10" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="Button" />

    <TextView
        android:id="@+id/retrunValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/passWord"
        android:layout_marginTop="32dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>


然后是实现。
package com.duduli.li;

import java.io.IOException;

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

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private TextView tv,tv2;
	private Button b;
	private EditText name,password;
	private MyHandler myHandler;
	private HttpTransportSE ht;
	
	private boolean processFlag = true;
//	private Handler handler;
	private SoapSerializationEnvelope envelope;
	private static final String SERVICE_NS = "http://li.duduli.com/";
	private static final String SERVICE_URL="http://10.0.2.2:8080/MyContact/services/LoginImplPort";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button) this.findViewById(R.id.button1);
        tv = (TextView) this.findViewById(R.id.textView1);
        tv2 = (TextView) this.findViewById(R.id.retrunValue);
        name = (EditText) this.findViewById(R.id.userName);
        password = (EditText) this.findViewById(R.id.passWord);
        myHandler = new MyHandler();
        b.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (processFlag) {  
					processFlag = false;;//  
					new Thread(new MyThread()).start();
	                new TimeThread().start();  
	             }else{
	            	 Toast.makeText(getApplicationContext(), "你点击太快了", Toast.LENGTH_SHORT).show();
	             }
			

			}
		});
    }

    class MyHandler extends Handler{

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			Bundle b = msg.getData();
			tv2.setText(b.getString("value")); 
			System.out.println(b.getString("value"));
		}
    	
    }
    
    class MyThread implements Runnable{

		@Override
		public void run() {
			// TODO Auto-generated method stub
			Message msg = new Message();
			Bundle b = new Bundle();
			String values = "";
	        ht = new HttpTransportSE(SERVICE_URL);
	        ht.debug = true;
	        //使用soap1.1协议创建Envelop对象
	        envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
	        //实例化SoapObject对象
	        SoapObject request = new SoapObject(SERVICE_NS, "log");
	        
	        request.addProperty("arg0", name.getText().toString());
	        request.addProperty("arg1", password.getText().toString());
	        
	        envelope.bodyOut = request;
			//你要执行的方法
				try {
					ht.call(null, envelope);
					if(envelope.getResponse()!=null){
						SoapObject result = (SoapObject) envelope.bodyIn;
						values = result.getProperty(0).toString();
		                
					}else{
						values = "nothing";
					}
					b.putString("value", values);
					System.out.println("ok");
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (XmlPullParserException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				msg.setData(b);
//				MainActivity.this.send
				myHandler.sendMessage(msg);
		}
    	
    }
    
    
    /** 
     * 计时线程(防止在一定时间段内重复点击按钮) 
     */  
	private class TimeThread extends Thread {
		public void run() {
			try {
				sleep(1000);
				processFlag = true;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


在这里需要指出的是,在android 2.3以后对程序行为进行了规范。不允许主线程对网络等耗时操作进行了。
所以需要handler和多线程的配合。
另外,如果用户按钮点击过快的话,会导致服务器响应比较慢,所以需要设置一个flag和一个定时线程,来限制用户行为。
分享到:
评论

相关推荐

    Android客户端访问Web Service的实现.pdf

    在探讨Android客户端如何访问Web Service时,首先需要了解Android平台的基础知识以及Web Service的相关技术细节。以下知识点是根据文档提供的标题、描述、标签以及部分内容,按照要求详细说明Android客户端访问Web ...

    Android访问 web service asmx

    Web Service ASMX 是一种基于.NET框架的Web服务技术,它允许开发者创建和部署Web服务,供其他应用程序(包括Android应用)调用。本教程将深入讲解如何在Android应用中访问ASMX类型的Web服务。 首先,我们要介绍关键...

    android 用webservice连接后台数据库

    从给定的内容来看,它主要提及了Android平台的应用开发,特别是关于如何使用Android 2.0版本的相关技术来开发应用程序,并且在很大程度上强调了Android在移动互联网时代的地位。这里包含的知识点可以分为以下几个...

    android 资料整理 web service

    在Android开发中,Web Service是一种常见的技术,用于让Android客户端应用程序与远程服务器进行通信,获取或发送数据。这里我们主要探讨Android与Web Service的交互,以及相关知识点。 首先,理解Web Service的概念...

    android web service 例子源代码

    4. **权限管理**:Android 6.0及以上版本需要动态申请网络访问权限(ACCESS_NETWORK_STATE和INTERNET)。源代码中应包含权限请求的逻辑。 5. **错误处理**:良好的错误处理机制是必不可少的,包括网络连接失败、...

    Android 通过 Ksoap2 访问 Web Service Demo

    通过以上步骤,你就可以利用Ksoap2在Android应用中访问Web Service,查询手机号码归属地。记住,实践是最好的老师,动手尝试编写代码并调试,遇到问题时查阅官方文档或社区资源,会进一步加深对Ksoap2的理解。

    从android中调用web service的源码.zip

    在Android开发中,调用Web Service是常见的需求,主要用于实现移动设备与服务器之间的数据交互。Web Service通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)协议,为不同...

    Android通过Webservices访问网络资源

    综上所述,Android通过Webservices访问网络资源涉及网络编程基础、权限管理、数据解析、UI绑定等多个环节。了解并熟练掌握这些知识点,对于开发能高效访问网络的Android应用至关重要。在实际开发中,结合具体项目...

    Android客户端访问服务器端的Web Service所需的KSoap包

    Web Service是一种常见的通信方式,而KSoap2则是Android平台下访问SOAP Web Service的首选库。本篇将详细介绍如何利用KSoap2库实现在Android客户端访问服务器端的Web Service。 首先,我们需要了解什么是SOAP...

    Android 请求 WebAPI的案例

    在Android开发中,与WebAPI进行交互是常见的需求,例如获取服务器数据、发送用户信息等。本案例"Android请求WebAPI"将详细讲解如何在Android应用中实现这一功能。WebAPI通常指的是基于HTTP协议的RESTful API,允许...

    基于Android和Web Service的掌上校园系统的设计与实现.pdf

    "基于Android和Web Service的掌上校园系统的设计与实现" 本文主要介绍了基于Android和Web Service的掌上校园系统的设计与实现。随着移动互联网的高速发展和智能手机的普及,广大师生迫切希望能够通过手机平台来随时...

    安卓Android源码——从android中调用web service的源码.zip

    在安卓(Android)平台上开发应用时,调用Web Service是一项常见的任务,这通常涉及到与远程服务器进行数据交互,实现功能如登录验证、数据同步等。本压缩包中的源码提供了从Android应用程序中调用Web Service的示例...

    Android学习平台中Web Service架构的实现与研究.pdf

    Web Service的核心技术包括XML(可扩展标记语言)、SOAP(简单对象访问协议)、WSDL(Web服务描述语言)以及UDDI(统一描述、发现和集成)。这些技术共同构成了Web Service的基础框架。 1.1 XML:XML是一种用于标记...

    从android中调用web service的源码

    在Android开发中,调用Web Service是常见的数据交互方式,特别是对于需要远程获取或发送数据的应用来说至关重要。Web Service通常采用SOAP(Simple Object Access Protocol)或REST(Representational State ...

    delphi XE5 ANDROID平台 调用 webservice并访问操作MSSQL数据库

    Delphi XE5 Android 平台调用 Webservice 并访问操作 MSSQL 数据库 Delphi XE5 是一款功能强大且灵活的开发环境,为开发者提供了跨平台的开发体验。在 Android 平台上,Delphi XE5 提供了强大的支持,允许开发者...

    访问web service代码

    访问web service代码

    安卓开发-从android中调用web service的源码.zip

    在Android开发中,调用Web Service是常见的数据交互方式,特别是在需要与远程服务器进行数据交换时。本资源“安卓开发-从android中调用web service的源码.zip”提供了具体的实现示例,帮助开发者理解这一过程。以下...

    android访问webservices详细例子

    在Android开发中,访问Web Services是一项常见的任务,用于与服务器端进行数据交互。Web Services可以是基于SOAP(简单对象访问协议)或者RESTful(表述性状态转移)的API,它们提供了一种跨平台、跨语言的数据交换...

Global site tag (gtag.js) - Google Analytics