WebService调用

权限

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


package H.AirTime;



import java.io.IOException;


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


import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


@SuppressWarnings("deprecation")
public class QQ extends Activity {
private static final String NAMESPACE = "http://WebXml.com.cn/";
private static String URL = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
private static final String METHOD_NAME = "qqCheckOnline";
private static String SOAP_ACTION = "http://WebXml.com.cn/qqCheckOnline";


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(getStat());
}


private String getStat() {
/*
* SoapObject request = new SoapObject(serviceNamespace,
* methodName); SoapObject构造函数的两个参数含义为:serviceNamespace –
* 你的webservice的命名空间,既可以是
* http://localhost:8088/flickrBuddy/services
* /Buddycast这样的,也可以是
* urn:PI/DevCentral/SoapService这样的;methodName – 你要调用方法的名字。
*/
SoapObject rpc = new SoapObject(NAMESPACE,
METHOD_NAME);
/*
* 对于webservice方法返回String类型的情况,还用不着开发者做序列化(Serialization)定制工作。
* 要点: kSOAP 1.X/2.0可以自动把四种SOAP类型映射为Java类型 SOAP type Java type
* xsd:int java.lang.Integer xsd:long java.lang.Long
* xsd:string java.lang.String xsd:boolean java.lang.Boolean
* 除此之外,都需要开发者自己做类型映射。
*/
rpc.addProperty("qqCode", "253640957");
/*
* HttpTransport tx = new HttpTransport(serviceURL); ht.debug
* = true; HttpTransport构造函数的参数含义为: serviceURL –
* 要投递SOAP数据的目标地址,譬如说 http://soap.amazon.com/onca/soap3 。
* HttpTransport是一个强大的辅助类,来完成Http-call transport
* process,它封装了网络请求的一切
* ,你完全不用考虑序列化消息。我们通过设置它的debug属性为true来打开调试信息。
* 方法HttpTransport.call()自己就能够发送请求给服务器、接收服务器响应并序列化SOAP消息,如下所示:
* ht.call(null, envelope); HttpTransport的call方法的两个参数含义为:
* soapAction – SOAP 规范定义了一个名为 SOAPAction 的新 HTTP 标头,所有 SOAP
* HTTP 请求(即使是空的)都必须包含该标头。 SOAPAction
* 标头旨在表明该消息的意图。通常可以置此参数为null
* ,这样HttpTransport就会设置HTTP标头SOAPAction为空字符串。 Envelope –
* 就是前面我们构造好的SoapSerializationEnvelope或SoapEnvelope对象。 注意:
* 对于HttpTransport的处理上,kSOAP2和kSOAP1.2的写法不一样。 对于kSOAP
* 1.2,HttpTransport的构造函数是HttpTransport (String url, String
* soapAction),第二个参数soapAction可以是要调用的webservice方法名。 而kSOAP
* 2,构造函数是 HttpTransport(String
* url)。kSOAP2相当于把webservice方法名分离出去,完全交给SoapObject去封装
* ,而HttpTransport仅仅负责把SoapEnvelope发送出去并接收响应
*/
AndroidHttpTransport ht = new AndroidHttpTransport(
URL);
// HttpTransportSE ht = new HttpTransportSE(URL);
/*
* 是否测试模式
*/
ht.debug = false;
/*
* SoapSerializationEnvelope envelope =new
* SoapSerializationEnvelope(SoapEnvelope.VER11);
* envelope.bodyOut = request; 要点:
* 你可以通过SoapSerializationEnvelope或者SoapEnvelope的构造函数来指明你要用SOAP的哪一个规范
* ,可以是以下几种之一: 常量SoapEnvelope.VER10:对应于SOAP 1.0规范
* 常量SoapEnvelope.VER11:对应于SOAP 1.1规范
* 常量SoapEnvelope.VER12:对应于SOAP 1.2规范
* 这样,无论要调用的webservice采用了哪一个SOAP规范,你都可以轻松应对。
*/
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
/*
* 发送请求
*/
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
/*
* ht.call(SOAP_ACTION, envelope);
*/
try {
ht.call(SOAP_ACTION, envelope);
}
catch (IOException e) {
return "IOException:" + e.getMessage();
}
catch (XmlPullParserException e) {
return "XmlPullParserException:"
+ e.getMessage();
}
// SoapObject result = (SoapObject) envelope.bodyIn;
// // result.getProperty(1);
// // SoapObject detail =
// // (SoapObject)result.getProperty("qqCheckOnlineResult");
// return (String) result
// .getProperty("qqCheckOnlineResult");
String result = "";
try {
if (envelope.getResponse() != null) {
SoapPrimitive response = (SoapPrimitive) envelope
.getResponse();
result = response.toString();
}
}
catch (SoapFault e) {
// TODO Auto-generated catch block
result = e.getMessage();
}
return result;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值