文档章节

android调用web service接口例子

淡看江湖
 淡看江湖
发布于 2015/02/05 14:58
字数 841
阅读 5195
收藏 0

下面给书具体的实例: 
mian.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:orientation="vertical" > 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" /> 
<EditText 
android:id="@+id/editText1" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:ems="10" > 
<requestFocus /> 
</EditText> 
<EditText 
android:id="@+id/editText2" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:ems="10" /> 
</LinearLayout> 


Activity:(该Activity调用了服务器端返回普通字符串的方法) 

复制代码代码如下:


package xidian.sl.android.webservice; 
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.EditText; 
public class WebServiceSimpleDemo extends Activity{ 
final static String SERVICE_NS = "http://webService.service.sl.xidian/"; 
final static String SERVICE_URL = "http://192.168.1.103:8090/WebExam/services/test"; 
private EditText txt1; 
private EditText txt2; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
txt1 = (EditText) findViewById(R.id.editText1); 
txt2 = (EditText) findViewById(R.id.editText2); 
//调用的方法 
String methodName = "getUser"; 
//创建httpTransportSE传输对象 
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); 
ht.debug = true; 
//使用soap1.1协议创建Envelop对象 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
//实例化SoapObject对象 
SoapObject request = new SoapObject(SERVICE_NS, methodName); 
/** 
* 设置参数,参数名不一定需要跟调用的服务器端的参数名相同,只需要对应的顺序相同即可 
* */ 
request.addProperty("name", "1006010054"); 
//将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息 
envelope.bodyOut = request; 
try{ 
//调用webService 
ht.call(null, envelope); 
//txt1.setText("看看"+envelope.getResponse()); 
if(envelope.getResponse() != null){ 
txt2.setText("有返回"); 
SoapObject result = (SoapObject) envelope.bodyIn; 
String name = result.getProperty(0).toString(); 
txt1.setText("返回值 = "+name); 
}else{ 
txt2.setText("无返回"); 

}catch (Exception e) { 
e.printStackTrace(); 




在AndroidManifest.xml进行Activity的注册和并添加访问网络的权限 

复制代码代码如下:


<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="xidian.sl.android.webservice" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk android:minSdkVersion="10" /> 
<application 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" > 
<activity 
android:name=".WebServiceSimpleDemo" 
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> 
<!-- 声明该应用自身所拥有的权限 --> 
<uses-permission android:name="android.permission.INTERNET" /> 
</manifest> 


运行后的结果如图所示: 


下面我们来试着调用回传符合对象的方法: 
activity: 

复制代码代码如下:


package xidian.sl.android.webservice; 
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.EditText; 
public class WebServiceComplexDemo extends Activity{ 
final static String SERVICE_NS = "http://webService.service.sl.xidian/"; 
final static String SERVICE_URL = "http://192.168.1.103:8090/WebExam/services/test"; 
private EditText txt1; 
private EditText txt2; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
txt1 = (EditText) findViewById(R.id.editText1); 
txt2 = (EditText) findViewById(R.id.editText2); 
//调用的方法 
String methodName = "getStuList"; 
//创建httpTransportSE传输对象 
HttpTransportSE ht = new HttpTransportSE(SERVICE_URL); 
ht.debug = true; 
//使用soap1.1协议创建Envelop对象 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
//实例化SoapObject对象 
SoapObject request = new SoapObject(SERVICE_NS, methodName); 
/** 
* 设置参数,参数名不一定需要跟调用的服务器端的参数名相同,只需要对应的顺序相同即可 
* */ 
//request.addProperty("name", "1006010054"); 
//将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息 
envelope.bodyOut = request; 
try{ 
//调用webService 
ht.call(null, envelope); 
txt2.setText("回传的值 :"+envelope.getResponse()); 
if(envelope.getResponse() != null){ 
SoapObject result = (SoapObject) envelope.bodyIn; 
SoapObject soapChilds = (SoapObject)result.getProperty(0); 
StringBuffer sb = new StringBuffer(); 
for(int i=0; i <soapChilds.getPropertyCount(); i++){ 
SoapObject soapChildsChilds = (SoapObject)soapChilds.getProperty(i); 
sb.append("姓名["+i+"] = "+soapChildsChilds.getProperty(0).toString()+"\n"); 
sb.append("学号["+i+"] = "+soapChildsChilds.getProperty(1).toString()+"\n"); 
sb.append("性别["+i+"] = "+soapChildsChilds.getProperty(2).toString()+"\n"+"\n"); 

txt1.setText(sb.toString()); 
}else{ 
txt1.setText("无返回"); 

}catch (Exception e) { 
e.printStackTrace(); 




区别就是对于返回值的处理上,使用几次getPropert()方法,这里主要看返回值的层次,看下面的结果应该就能明白了,根据括号的层次来进行确定 


© 著作权归作者所有

淡看江湖
粉丝 36
博文 93
码字总数 96696
作品 0
浦东
后端工程师
私信 提问
Android Service详解

一、Service的种类 1、本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 ...

恰同学少年
2015/07/29
1K
0
Android O HIDL的使用例子 -- 蓝牙HCI 服务进程

From 1.1、Treble 计划概览 Android O 引入” Treble” 计划,目标是通过重构 Android OS 的 framework,使 Android 设备制造商能更快、更易、更低成本地升级 Android 版本。新的架构主要有两...

慢慢的燃烧
02/23
0
0
[翻译]Android Bound Services

一个bound service是一个client-server接口中的server端。一个bound service允许应用组件(比如activities)bind到它,发送请求,接收响应,甚至是执行进程间通信(IPC)。一个bound service在典...

WolfCS
2014/03/23
111
0
Android中从服务器获取数据的几种方法利与弊?

最近被这个问题困扰着,想用android 开发个小软件。主要功能是从服务器读取数据到android上显示。由于个人对android开发不太了解,请大神们给些指点。 我能想到的数据传输模式有以下几种: ...

姓骚扰
2012/08/14
3.6K
3
Android 之 AIDL 和远程 Service 调用

文章转载:http://android.yaohuiji.com/archives/728 本讲的内容,理解起来很难,也许你看了很多资料也看不明白,但是用起来缺简单的要命。所以我们干脆拿一个音乐播放器中进度条的实例来说...

无鸯
2011/09/21
2.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
19分钟前
3
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
21分钟前
2
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部