直接上代码

WebServicesLib.java

  1. package com.example.testwebservices;
  2.  
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5.  
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8.  
  9. import java.util.Map;
  10.  
  11. import org.xmlpull.v1.XmlPullParser;
  12.  
  13. import android.util.Xml;
  14.  
  15. //import javax.xml.parsers.DocumentBuilder;
  16. //import javax.xml.parsers.DocumentBuilderFactory;
  17. //
  18. //import org.w3c.dom.Document;
  19. //import org.w3c.dom.Element;
  20. //import org.w3c.dom.NodeList;
  21.  
  22. public class WebServicesLib {
  23.  
  24. /**
  25. * 调用WebServices
  26. *
  27. * @param SERVER_URL WebServices地址
  28. * @param serviceNameSpace WebServices命名空间
  29. * @param functionName 函数名
  30. * @param params 参数列表(名称必须对应)
  31. * @return 返回结果
  32. * @throws Exception
  33. */
  34. public static String InvokeWS(String SERVER_URL, String serviceNameSpace, String functionName, Map<String, String> params) throws Exception {
  35. StringBuffer strBuff = new StringBuffer();
  36. strBuff.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
  37. strBuff.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n");
  38. strBuff.append(" <soap12:Body>\n");
  39. if (params==null||params.size()==0) {
  40. strBuff.append(" <" + functionName + " xmlns=\""+ serviceNameSpace +"\" />\n");
  41. } else {
  42. strBuff.append(" <" + functionName + " xmlns=\""+ serviceNameSpace +"\">\n");
  43. for(Map.Entry<String, String> entry : params.entrySet())
  44. {
  45. strBuff.append(" <"+entry.getKey()+">" + entry.getValue() + "</"+entry.getKey()+">\n");
  46. }
  47. strBuff.append(" </" + functionName + ">\n");
  48. }
  49.  
  50. strBuff.append(" </soap12:Body>\n");
  51. strBuff.append("</soap12:Envelope>");
  52.  
  53. // return strBuff.toString();
  54.  
  55. byte[] data = strBuff.toString().getBytes();
  56. // 提交Post请求
  57. URL url = new URL(SERVER_URL);
  58. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  59. conn.setRequestMethod("POST");
  60. conn.setConnectTimeout(5 * 1000);
  61. conn.setDoOutput(true);
  62. conn.setRequestProperty("Content-Type","application/soap+xml; charset=utf-8");
  63. conn.setRequestProperty("Content-Length", String.valueOf(data.length));
  64. OutputStream outStream = conn.getOutputStream();
  65. outStream.write(data);
  66. outStream.flush();
  67. outStream.close();
  68. int responseCode = conn.getResponseCode();
  69. if (responseCode == 200) {
  70. InputStream inStream = conn.getInputStream();
  71. XmlPullParser parser = Xml.newPullParser();
  72. parser.setInput(inStream, "UTF-8");
  73. int eventType = parser.getEventType();// 产生第一个事件
  74. while (eventType != XmlPullParser.END_DOCUMENT) {
  75. // 只要不是文档结束事件
  76. switch (eventType) {
  77. case XmlPullParser.START_TAG:
  78. String name = parser.getName();// 获取解析器当前指向的元素的名称
  79. if ((functionName+"Result").equals(name)) {
  80. return parser.nextText();
  81. }
  82. break;
  83. }
  84. eventType = parser.next();
  85. }
  86. return "";
  87. }
  88. return "Error:"+responseCode;
  89. }
  90. }

调用方法

MainActivity.java

  1. package com.example.testwebservices;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.view.Menu;
  11. import android.view.View;
  12. import android.widget.Button;
  13. import android.widget.EditText;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16.  
  17. public class MainActivity extends Activity {
  18.  
  19. private TextView mobileAddress;
  20.  
  21. private static final int MSG_SUCCESS = 0;//
  22. private static final int MSG_FAILURE = 1;//
  23.  
  24. private Thread mThread;
  25. private boolean isRunning = false;
  26. /**
  27. * 异步调用
  28. */
  29. private Handler mHandler = new Handler() {
  30. public void handleMessage(Message msg) {// 此方法在UI线程运行
  31. switch (msg.what) {
  32. case MSG_SUCCESS:
  33.  
  34. mobileAddress.setText(msg.obj.toString());
  35. Toast.makeText(getApplication(), "查询成功", Toast.LENGTH_LONG)
  36. .show();
  37. break;
  38. case MSG_FAILURE:
  39. mobileAddress.setText(msg.obj.toString());
  40. Toast.makeText(getApplication(), "查询失败", Toast.LENGTH_LONG)
  41. .show();
  42. break;
  43. }
  44. isRunning=false;
  45. }
  46. };
  47.  
  48. Runnable runnable = new Runnable() {
  49. @Override
  50. public void run() {
  51. // 读取XML文件
  52. try {
  53. Map<String, String> params = new HashMap<String, String>();
  54.  
  55. String add = WebServicesLib.InvokeWS(
  56. "http://192.168.1.149:6666/WebServices/SystemRoles.asmx",
  57. "http://tempuri.org/", "GetAllSystemRoles", params);
  58. mHandler.obtainMessage(MSG_SUCCESS, add).sendToTarget();
  59. } catch (Exception e) {
  60. mHandler.obtainMessage(MSG_FAILURE,e.getMessage()).sendToTarget();
  61. }
  62. }
  63. };
  64.  
  65. @Override
  66. protected void onCreate(Bundle savedInstanceState) {
  67. super.onCreate(savedInstanceState);
  68. setContentView(R.layout.activity_main);
  69.  
  70. mobileAddress = (TextView) this.findViewById(R.id.mobileAddress);
  71. Button btnSearch = (Button) this.findViewById(R.id.btnSearch);
  72. btnSearch.setOnClickListener(new View.OnClickListener() {
  73. @Override
  74. public void onClick(View arg0) {
  75. // Android 4.0 之后不能在主线程中请求HTTP请求
  76. if (!isRunning) {
  77. isRunning=true;
  78. mThread = new Thread(runnable);
  79. mThread.start();// 线程启动
  80. } else {
  81. Toast.makeText(getApplication(), "线程已经启动。",Toast.LENGTH_LONG).show();
  82. }
  83. }
  84. });
  85. }
  86.  
  87. @Override
  88. public boolean onCreateOptionsMenu(Menu menu) {
  89. // Inflate the menu; this adds items to the action bar if it is present.
  90. getMenuInflater().inflate(R.menu.activity_main, menu);
  91. return true;
  92. }
  93.  
  94. }

Android万能使用WebServices(不用引入外部包)的更多相关文章

  1. Maven 引入外部包

    当需要从外部引入一个包(譬如说读写Excel 的POI  jar 包 ), 不需要手动地去官网下载一个包然后粘贴到相应的地方. 只需要把Java 工程 转为 Maven 工程 ( 在工程上右键 > ...

  2. maven引入外部包的方法1

    最近一个项目需要用到两个外部包文件 ctgclient-8.1.0.3.jar ctgserver-8.1.0.3.jar 方便maven打包,修改pom.xml配置(basedir为pom.xml所 ...

  3. android下使用smack需引入的包

    compile 'org.igniterealtime.smack:smack-android:4.2.0-alpha1' compile 'org.igniterealtime.smack:smac ...

  4. 【原创】不用封装jar包 直接引入工程使用的方法(类似android的 is Library功能)

    1.制作lib工程,这里我简单制作一个测试类 2.eclipse中 java Project工程引入方法 2.1.新建个java工程,在属性配置中选择 "Java Build Path&qu ...

  5. 如何在Android应用中引入外部网页

    在某些情况下,我们需要在Android应用中引入外部网页,这里记录一下如何操作(其实很简单^.^). 先介绍一下开发环境: 开发工具:Android Studio 1.5 SDK API版本:17 操 ...

  6. Android 如何在Eclipse 引入外部纯Java项目(不是打成Jar使用)

    应用情景--如标题: 在Eclipse的 “Android启动项目”中引入“外部的纯Java项目”,能运行的只有是基于Android的测试代码才可以. 一直很纳闷,如果外部写好一个Java插件(例如服 ...

  7. maven 引入外部jar包的几种方式(转)

    原文链接: maven 引入外部jar包的几种方式 方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud< ...

  8. Android 引入外部模块编译选择

    /********************************************************************************* * Android 引入外部模块编 ...

  9. spring-boot打包,引入外部jar包问题

    这是我引入的外部jar包,打包的时候找不到外部jar包路径 弄了好久 在lib下引入外部jar包,运行没问题,但是打包是出现问题了,具体解决办法 再pom中加入如下配置,告诉maven导入本地jar ...

随机推荐

  1. Remoting&WebService的区别之处

    Remoting与Web Services的区别是:(1)既支持TCP信道又支持HTTP信道,传输速度快(2)即可传输XML的SOAP包又可传输二进制流,效率高(3)Remoteing主要用于C/S结 ...

  2. 网易云音乐PC端刷曲快捷键

    文章首发于szhshp的第三边境研究所(szhshp.org), 转载请注明 网易云音乐PC端刷曲快捷键   好吧我承认我特别懒 云音乐其实做的还不错,FM推荐的算法明显比虾米好. 虾米可以听的曲子都 ...

  3. Starting MySQL... ERROR! The server quit without updating PID file 解决办法

    来源:http://blog.rekfan.com/articles/186.html 我使用了第4条解决了问题 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的 ...

  4. css学习笔记 6

    对于css样式文件的规划方式将直接影响后期对web站点维护的效率,对于大型的复杂站点一般将css样式文件分为两部分:页面的全局定义及处理页面基本布局的css样式文件和处理细节方面的css样式文件.这样 ...

  5. C#面向对象特征的具体实现及作用详解

    转自:http://www.jb51.net/article/42390.htm 众所周知,面向对象编程的特点为:封装.继承.多态.C#是一门完全面向对象的语言,由于比Java推出的时间还要晚,所以对 ...

  6. TensorFlow之Varibale 使用方法

    ------------------------------------------- 转载请注明: 来自博客园 xiuyuxuanchen 地址:http://www.cnblogs.com/gre ...

  7. Android实现圆形图片

     情景再现: 写Android程序也有一段时间了,今天突然被问怎么实现一个圆形图片,很多app图像是圆形的.但是用户上传的图像可不是圆的,所以问题就来了,需要我们代码实现圆形图片.但是大脑飞转想到第三 ...

  8. windows socket

    //服务器 // winsvr.cpp : Defines the entry point for the console application. // #include "stdafx. ...

  9. svn快速教程

    本文拷贝自网址:http://www.subversion.org.cn/?action-viewnews-itemid-1 如何快速建立Subversion服务器,并且在项目中使用起来,这是大家最关 ...

  10. MySQL之远程登录配置

    1.注释掉mysql配置文件中的这一行:#bind-address  = 127.0.0.1 2.给指定服务器的用户授权:GRANT ALL PRIVILEGES ON *.* TO root@&qu ...