- 浏览: 663222 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
这里我们的WebService使用xFire开发。
首先开发服务器端,为了方便我们使用MyEclipse开发WebService
定义文件操作的接口IFileServices.java
package com.iflytek.services; public interface IFileServices { /** * 文件的保存 * * @param fileName * 文件名称 * @param content * 文件的内容 * @throws Exception */ public void save(String fileName, String content) throws Exception; /** * 文件的读取 * * @param fileName * 文件名称 * @return * @throws Exception */ public String load(String fileName) throws Exception; }
实现类FileServicesImpl.java
package com.iflytek.services.impl; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Scanner; import com.iflytek.services.IFileServices; public class FileServicesImpl implements IFileServices { public String load(String fileName) throws Exception { File file = new File("D:" + File.separator + "xdwang" + File.separator + fileName); if (!file.exists()) { // 文件不存在 return null; } StringBuffer buf = new StringBuffer(); Scanner scan = new Scanner(new FileInputStream(file)); scan.useDelimiter("\n"); while (scan.hasNext()) { buf.append(scan.next()); } scan.close(); return buf.toString(); } public void save(String fileName, String content) throws Exception { File file = new File("D:" + File.separator + "xdwang" + File.separator + fileName); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } PrintStream out = new PrintStream(new FileOutputStream(file)); out.print(content); out.close(); } }
配置services.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>iflytek</name> <serviceClass> com.iflytek.services.IFileServices </serviceClass> <implementationClass> com.iflytek.services.impl.FileServicesImpl </implementationClass> <style>wrapped</style> <use>literal</use> <scope>application</scope> </service> </beans>
这时,在浏览器上输入:
http://IP:8080/AndroidWebServiceProject/services/iflytek?wsdl ,即可打开,为此一个 Web Service 程序的服务器端就开发完成了,下面我们进行 Android 客户端程序的开发。
Android 程序要调用 Web Service 程序,并不像调用 JSP/Servlet 或 Socket 程序那样直接使用系统提供的类完成,因为 Android 中并没有提供直接与 WebService 互调用的操作类库,所以必须依靠第三方提供的类库才可以完成,比较常用的就是 ksoap 类库,可以到 http://code.google.com/p/ksoap2-android/ 上进行下载。
下载过后,将其配置到 Android 项目的 Java Build Path 中即可,配置完成之后,即可在 Android 中编写程序调用 WebService 程序,具体步骤如下:
1、 通过 org.ksoap2.serialization.SoapObject 类来指定要调用的 WebService 程序所需要的命名控件,而 SoapObject 类的常用方法如下:
No. |
方法 |
描述 |
1 |
Public SoapObject(String namespace,String name) |
实例化 SoapObject 类对象 |
2 |
Public String getName() |
取得要调用的方法名称 |
3 |
Public String getNameSpace() |
取得 Soap 对象的命名空间 |
4 |
Public Object getProperty(java.lang.String name) |
取得指定名称的属性 |
5 |
Public SoapObject addProperty(String name,Object value) |
设置调用 WebService 方法时所需要的参数 |
2、 取得 SoapObject 的实例化对象之后,即可通过 SoapObject 类的 addProperty() 方法设置调用 save() 方法时所需要的参数,而设置的顺序要与 Web Service 程序端的 save() 方法的参数顺序符合,在调用 addProperty() 方法时,不一定非要和服务器端上的方法名称、参数名称一样,因为程序在执行时也只是根据设置参数的顺序来决定,而不是根据名称。
3、 生成调用 WebService 程序的 SOAP 请求信息,此时可以利用 org.ksoap2.serialization.SoapSerializationEnvelope 类完成,此类的常用方法如下:
No. |
方法、常量、属性 |
类型 |
描述 |
1 |
Public static final int VER11 |
常量 |
使用 SOAP 11 版本操作 |
2 |
Public Object bodyIn |
属性 |
封装输入的 SoapObject 对象 |
3 |
Public Object bodyOut |
属性 |
封装输出的 SoapObject 对象 |
4 |
Public Boolean dotNet |
属性 |
是否为 .NET 连接,此处设置为 false ,如果设置为 true ,则服务器端无法接受请求参数 |
5 |
Public SoapSerializationEnvelope(int version) |
构造 |
实例化 SoapSerializationEnvelope 类对象 |
6 |
Public void setOutputSoapObject(Object soapObject) |
普通 |
设置要输出的 SoapObject 对象 |
4、 创建 org.ksoap2.transport.HttpTransportSE 类对象,并且利用此对象调用 WebService 端的操作方法,此类的常用操作如下:
No. |
方法、属性 |
描述 |
1 |
Public Boolean debug |
是否调试,如果设置为 true ,则表示调试 |
2 |
Public HttpTransportSE(String url) |
实例化 HttpTransportSE 类的对象 |
3 |
public void call(String soapAction, SoapEnvelope envelope) throws IOException, XmlPullParserException |
调用 WebService 端的操作方法 |
5、 接受 WebService 的返回值
Android 客户端代码
WebServiceActivity.java
package com.iflytek.demo; 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.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class WebServiceActivity extends Activity { private Button saveBtn = null; private Button loadBtn = null; private TextView showTxt = null; /** * 需要调用WebService的命名空间 */ private static final String NAMESPACE = "http://IP/"; /** * 服务的地址,不需要*.wsdl */ private static String URL = "http://IP:8080/AndroidWebServiceProject/services/iflytek"; /** * 需要调用的保存方法 */ private static final String SAVE_METHOD_NAME = "save"; /** * 需要调用的读取方法 */ private static final String LOAD_METHOD_NAME = "load"; private static String SOAP_ACTION = "http://IP:8080/AndroidWebServiceProject/services/"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.saveBtn = (Button) super.findViewById(R.id.save); this.loadBtn = (Button) super.findViewById(R.id.load); this.showTxt = (TextView) super.findViewById(R.id.show); this.saveBtn.setOnClickListener(new SaveOnClickListenerImpl()); this.loadBtn.setOnClickListener(new LoadOnClickListenerImpl()); } private class SaveOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { final AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected void onPostExecute(String result) { Toast.makeText(WebServiceActivity.this, "数据保存成功", Toast.LENGTH_SHORT).show(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... arg0) { SoapObject soapObject = new SoapObject(NAMESPACE, SAVE_METHOD_NAME); soapObject.addProperty("fileName", "xdwang.txt");// 设置参数 soapObject.addProperty("content", "Hello, xdwang "); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11);// 给出版本号 envelope.bodyOut = soapObject;// 输出对象 envelope.dotNet = false;// 不是.NET服务器 envelope.setOutputSoapObject(soapObject);// 输出SoapObjet HttpTransportSE trans = new HttpTransportSE(URL);// 指定地址 trans.debug = true; // 使用调试功能 try { trans.call(SOAP_ACTION, envelope);// 调用方法 } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } return null; } }; task.execute(); } } private class LoadOnClickListenerImpl implements OnClickListener { @Override public void onClick(View v) { final AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected void onPostExecute(String result) { WebServiceActivity.this.showTxt .setText("Web Service返回的数据是:" + result); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... arg0) { SoapObject soapObject = new SoapObject(NAMESPACE, LOAD_METHOD_NAME); soapObject.addProperty("fileName", "xdwang.txt");// 设置参数 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11);// 给出版本号 envelope.bodyOut = soapObject;// 输出对象 envelope.dotNet = false;// 不是.NET服务器 envelope.setOutputSoapObject(soapObject);// 输出SoapObjet HttpTransportSE trans = new HttpTransportSE(URL);// 指定地址 trans.debug = true; // 使用调试功能 try { trans.call(SOAP_ACTION, envelope);// 调用方法 } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } SoapObject result = (SoapObject) envelope.bodyIn;// 接收返回值 return result.getProperty(0).toString(); } }; task.execute(); } } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/save" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="通过WebService保存文件" /> <Button android:id="@+id/load" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="通过WebService读取文件" /> <TextView android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="显示文件读取内容" /> </LinearLayout>
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
- ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar (148.5 KB)
- 下载次数: 3
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1541Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2453WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3267对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2158与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1846在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2834一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1380在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 1956一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1569一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 1986传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3431一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2002一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1480一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2206Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1680Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1514在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2265导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1248Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 1930在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1402Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
封底 -13 扉页 -12 版权 -11 作者简介 -10 前言 -9 目录 -4 第1章 Android简介 1 1.1 一些背景信息 2 1.1.1 不远的过去 2 1.1.2 未来的前景 2 1.2 对Android的误解 3 1.3 开放的移动开发平台 3 1.4 自带的...
全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平台的Web ...
27_网络通信之通过GET和POST方式提交参数给web应用.avi 所在项目:newsmanage & Web端应用:web 28_网络通信之通过HTTP协议实现文件上传.avi 所在项目:newsmanage & Web端应用:web 29_发送xml数据和调用webservice...
全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平台的Web ...
27_网络通信之通过GET和POST方式提交参数给web应用.avi 所在项目:newsmanage & Web端应用:web 28_网络通信之通过HTTP协议实现文件上传.avi 所在项目:newsmanage & Web端应用:web 29_发送xml数据和调用webservice...
全书内容覆盖了android用户界面编程、android四大组件、android资源访问、图形/图像处理、事件处理机制、android输入/输出处理、音频/视频多媒体应用开发、opengl与3d应用开发、网络通信编程、android平台的web ...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发Node.js、C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...
详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合Android与Google强大的网络服务等内容。随书光盘中包括了...
详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合Android与Google强大的网络服务等内容。随书光盘中包括了...
13.1 基于TCP协议的网络通信 477 13.1.1 TCP协议基础 477 13.1.2 使用ServerSocket创建 TCP服务器端 478 13.1.3 使用Socket进行通信 479 13.1.4 加入多线程 483 13.2 使用URL访问网络资源 488 ...
详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合Android与Google强大的网络服务等内容。随书光盘中包括了...
第10章 Android的网络通信 10.1 访问Internet 10.1.1 使用WebKit组件访问Internet 10.1.2 使用Apache HttpComponents访问Internet 10.2 Socket通信 10.3 应用实例详解:手机 短信程序 10.3.1 实例分析 10.3.2 实例...
详细介绍了开发Android的人机交互界面、Android常用的开发控件、Android手机收发短信等通信服务、开发Android手机的自动服务功能和娱乐多媒体功能以及整合Android与Google强大的网络服务等内容。随书光盘中包括了...
第8章 网络通信 8.1 通过HTTP访问网络 8.1.1 测试用Web服务器 8.1.2 WebView组件 8.1.3 HttpURLConnection 8.2 Socket编程 8.3 数据的解析 8.3.1 JSON数据解析 8.3.2 XML数据解析 8.4 Web ...
在Java中使用WebService进行网络通信的实例源码,适用于android开发,在Android中,第三方公司提供了基于webservice的jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar。本实例演示了使用Web ...