Android 访问WebService的方法

Web Service是实现异构程序之间方法调用的一种机制。Web Service通过一种XML格式的特殊文件来描述方法、参数、调用和返回值,这种格式的XML文件称为WSDL(Web Service Des cription Language),即Web服务器描述语言。Web Service采用的通信协议是SOAP(Simple ObjectAccess Protocol),即简单对象访问协议。

   Java领域的Web Service实现有很多方式,例如Sun公司的XML-RPC、Apache的Axis以及Codehaus的Xfire,但是这些都不适合在资源有限的移动设备中使用。早期的Java ME开发中使用到了KSOAP,近期Google也发布了针对Android的KSOAP jar包。该jar文件的访问地址为http://code.google.com/p/ksoap2-android/downloads/list。

   android 应用程序要访问互联网上的服务,如天气预报,股票信息;则需要通过SOAP传输协议来访问。 首先要得到服务器提供的地址、命名空间、方法名,参数的键和返回值的键;android应用程序通过这些键来传递值。

   具体步骤:

//创建HttpTransportSE对象

HttpTransportSEhttpse = new HttpTransportSE("http://192.168.1.13:8088/testwebservice/LoginPort");

//使用SOAP协议创建Envelop对象

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

//实例化SoapObject

SoapObjectsoapObject = new SoapObject("http://bean.lovo.com/","validate");

soapObject.addProperty("arg0", usernameText.getText().toString());

soapObject.addProperty("arg1", pwdText.getText().toString());

//将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息

envelope.bodyOut = soapObject;

httpse.call(null, envelope);

//获取服务器响应返回的SOAP消息

SoapObject result = (SoapObject) envelope.bodyIn;

//获取返回的数据

String returnStr = result.getProperty("return").toString();

下面的例子是android应用程序访问网络PC服务器。

[html]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
public  class  WebServiceActivity  extends  Activity  implements OnClickListener{ 
     /**用户名和密码编辑框*/
     private  EditText userText,pwdText; 
     /**确定按钮*/
     private  Button okBtn; 
     /**显示返回值的文本框*/
     private  TextView infoText; 
     /**服务地址*/
     private  static  final  String SERVICE_URL = "http://192.168.1.100:8080/loginservice/LoginServicePort" 
     /**命名空间*/
     private  static  final  String NAME_SPACE = "http://service.lovo.com/"
         
     @Override
     public  void  onCreate(Bundle savedInstanceState) { 
         super .onCreate(savedInstanceState); 
         setContentView(R.layout.main); 
             
         okBtn = (Button) findViewById(R.id.web_service_btn); 
         userText=(EditText) findViewById(R.id.web_service_username); 
         pwdText=(EditText) findViewById(R.id.web_service_pwd); 
         infoText = (TextView) findViewById(R.id.web_service_show_info); 
         okBtn.setOnClickListener( this ); 
    
     @Override
     public  void  onClick(View v) { 
     
         if (v == okBtn){ 
             //连接对象 
             HttpTransportSE httpSE =  new  HttpTransportSE(SERVICE_URL); 
             //通过SOAP1.1协议得到envelop对象 
             SoapSerializationEnvelope envelop =  new SoapSerializationEnvelope(SoapEnvelope.VER11); 
             //根据命名空间和方法得到SoapObject对象 
             SoapObject soapObject =  new  SoapObject(NAME_SPACE, "validate" ); 
             //向调用方法传递参数 
             soapObject.addProperty( "arg0" , userText.getText().toString()); 
             soapObject.addProperty( "arg1" , pwdText.getText().toString()); 
             //将soapObject对象设置为envelop对象,传出消息 
             envelop.bodyOut = soapObject; 
             try 
                 //开始调用远程方法 
                 httpSE.call( null , envelop); 
                 //得到远程方法返回的SOAP对象 
                 SoapObject resultObj = (SoapObject) envelop.bodyIn; 
                 //得到服务器传回的数据 
                 String resultStr = resultObj.getProperty( "return" ).toString(); 
                 //处理返回值 
                 Toast.makeText( this , resultStr, Toast.LENGTH_LONG).show(); 
                 infoText.setText(resultStr); 
             catch  (Exception e) { 
                 e.printStackTrace(); 
             }  
        
    
public  class  WebServiceActivity  extends  Activity  implements OnClickListener{
/**用户名和密码编辑框*/
private  EditText userText,pwdText;
/**确定按钮*/
private  Button okBtn;
/**显示返回值的文本框*/
private  TextView infoText;
/**服务地址*/
private  static  final  String SERVICE_URL = "http://192.168.1.100:8080/loginservice/LoginServicePort"  ;
/**命名空间*/
private  static  final  String NAME_SPACE = "http://service.lovo.com/" ;
@Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
           
         okBtn = (Button) findViewById(R.id.web_service_btn);
         userText=(EditText) findViewById(R.id.web_service_username);
         pwdText=(EditText) findViewById(R.id.web_service_pwd);
         infoText = (TextView) findViewById(R.id.web_service_show_info);
         okBtn.setOnClickListener( this );
     }
@Override
public  void  onClick(View v) {
if (v == okBtn){
//连接对象
HttpTransportSE httpSE =  new  HttpTransportSE(SERVICE_URL);
//通过SOAP1.1协议得到envelop对象
SoapSerializationEnvelope envelop =  new SoapSerializationEnvelope(SoapEnvelope.VER11);
//根据命名空间和方法得到SoapObject对象
SoapObject soapObject =  new  SoapObject(NAME_SPACE,  "validate" );
//向调用方法传递参数
soapObject.addProperty( "arg0" , userText.getText().toString());
soapObject.addProperty( "arg1" , pwdText.getText().toString());
//将soapObject对象设置为envelop对象,传出消息
envelop.bodyOut = soapObject;
try  {
//开始调用远程方法
httpSE.call( null , envelop);
//得到远程方法返回的SOAP对象
SoapObject resultObj = (SoapObject) envelop.bodyIn;
//得到服务器传回的数据
String resultStr = resultObj.getProperty( "return" ).toString();
//处理返回值
Toast.makeText( this , resultStr, Toast.LENGTH_LONG).show();
infoText.setText(resultStr);
catch  (Exception e) {
e.printStackTrace();
}
}
}
}

注意:要增加一个network访问权限。    

<uses-permission android:name="android.permission.INTERNET"/>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值