Android开发之查询QQ是否在线

这个小程序的主要原理是通过HTTP协议发送XML数据并调用webservice,分析返回的数据来进行Android查询QQ是否在线

Web Service(WEB服务)能够快捷和方便地综合并结合各种系统、商务和任何应用平台。新出现的 Web Services 标准: SOAP、WSDL 和 UDDI 能够使任何系统和系统之间的应用变为更加方便和廉价。

Web服务(Web Services)和Service—Oriented Architecture作为实现分布式系统和履行公司内部、公司之间的应用整合的技术和架构出现。SOA和Web服务的体系结构是两个不同层面的问题,前者是概念模式,面向商业应用;后者则是实现模式,面向技术框架。

面向服务的体系结构所表示的是一个概念上的模型,在这个模型中,松散耦合的应用在网络上被描述、发布和调用。而Web服务则是一组由协议构成的协议栈所定义的框架结构,它定义了在不同的系统之间通信松散耦合的编程框架。也可以认为,Web服务体系结构实际上是面向服务的体系结构的一个特定实现;面向服务的体系结构作为一个概念上的模型,将网络、传输协议以及安全等具体的细节都遗留给特定的实现。Web服务中的SOAP,WSDL等都是具体实现细节的标准。

首先写出布局

然后建立web服务的xml,qqstatus.xml

Service方法

package cn.class3g.service;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import cn.class3g.utils.StreamTool;

public class QQService {

	public static String getQQstatus(String qq) throws Exception {
		InputStream inStream = QQService.class.getClassLoader()
				.getResourceAsStream("qqstatus.xml");
		byte[] data = StreamTool.readInputStream(inStream);
		String xml = new String(data, "UTF-8");
		String soapEntity = xml.replaceAll("\$qq", qq);
		data = soapEntity.getBytes();
		String path = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
		URL url = new URL(path);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setDoOutput(true);
		conn.setConnectTimeout(5000);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Content-Type",
				"application/soap+xml; charset=utf-8");
		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
		OutputStream outStream = conn.getOutputStream();
		outStream.write(data);
		outStream.flush();
		outStream.close();
		if (conn.getResponseCode() == 200) {
			InputStream responseStream = conn.getInputStream();
			return pareseXml(responseStream);
		}
		return null;

	}

	private static String pareseXml(InputStream responseStream)
			throws Exception {
		XmlPullParser parser = Xml.newPullParser();
		parser.setInput(responseStream, "UTF-8");
		int event = parser.getEventType();
		while (event != XmlPullParser.END_DOCUMENT) {
			switch (event) {
			case XmlPullParser.START_TAG:
				if ("qqCheckOnlineResult".equals(parser.getName())) {
					return parser.nextText();
				}
				break;
			}
			event = parser.next();
		}
		return null;
	}
}

Activity

package cn.class3g.qq;

import cn.class3g.service.QQService;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
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 QqStatusActivityextends Activity implements OnClickListener {
   Button submitBtn;
   EditText qqET;
   TextView resultTV;

   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      findViews();
   }

   private void findViews() {
      submitBtn = (Button) this.findViewById(R.id.buttonID);
      qqET = (EditText) this.findViewById(R.id.qqID);
      resultTV = (TextView) this.findViewById(R.id.resultID);
      submitBtn.setOnClickListener(this);
   }

   public void onClick(View v) {
      String qqNumber = qqET.getText().toString().trim();
      if (!"".equals(qqNumber)) {
        try {
           String result = QQService.getQQstatus(qqNumber);
           System.out.println(result.toString());
           if (result.equals("Y")) {
              resultTV.setText("在线");
           } else if (result.equals("N")) {
              resultTV.setText("不在线");
           }
        } catch (Exception e) {
           Log.e("tag", e.toString());
           Toast.makeText(this, R.string.error, Toast.LENGTH_LONG).show();
        }
      }
   }
}
暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心