直接上代码

WebServicesLib.java

package com.example.testwebservices;import java.io.InputStream;
import java.io.OutputStream;import java.net.HttpURLConnection;
import java.net.URL;import java.util.Map;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//
//import org.w3c.dom.Document;
//import org.w3c.dom.Element;
//import org.w3c.dom.NodeList;public class WebServicesLib {/*** 调用WebServices** @param SERVER_URL WebServices地址* @param serviceNameSpace WebServices命名空间* @param functionName 函数名* @param params 参数列表(名称必须对应)* @return 返回结果* @throws Exception*/public static String InvokeWS(String SERVER_URL, String serviceNameSpace,    String functionName,  Map<String, String> params) throws Exception {StringBuffer strBuff = new StringBuffer();strBuff.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");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");strBuff.append("  <soap12:Body>\n");if (params==null||params.size()==0) {strBuff.append("    <" + functionName + " xmlns=\""+ serviceNameSpace +"\" />\n");} else {strBuff.append("    <" + functionName + " xmlns=\""+ serviceNameSpace +"\">\n");for(Map.Entry<String, String> entry : params.entrySet()){strBuff.append("      <"+entry.getKey()+">" + entry.getValue() + "</"+entry.getKey()+">\n");}strBuff.append("    </" + functionName + ">\n");}strBuff.append("  </soap12:Body>\n");strBuff.append("</soap12:Envelope>");//        return strBuff.toString();byte[] data = strBuff.toString().getBytes();// 提交Post请求URL url = new URL(SERVER_URL);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");conn.setConnectTimeout(5 * 1000);conn.setDoOutput(true);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();int responseCode = conn.getResponseCode();if (responseCode == 200) {InputStream inStream = conn.getInputStream();XmlPullParser parser = Xml.newPullParser();parser.setInput(inStream, "UTF-8");int eventType = parser.getEventType();// 产生第一个事件while (eventType != XmlPullParser.END_DOCUMENT) {// 只要不是文档结束事件switch (eventType) {case XmlPullParser.START_TAG:String name = parser.getName();// 获取解析器当前指向的元素的名称if ((functionName+"Result").equals(name)) {return parser.nextText();}break;}eventType = parser.next();}return "";}return "Error:"+responseCode;}
}

调用方法

MainActivity.java

package com.example.testwebservices;import java.util.HashMap;
import java.util.Map;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {private TextView mobileAddress;private static final int MSG_SUCCESS = 0;// private static final int MSG_FAILURE = 1;// private Thread mThread;private boolean isRunning = false;/*** 异步调用*/private Handler mHandler = new Handler() {public void handleMessage(Message msg) {// 此方法在UI线程运行switch (msg.what) {case MSG_SUCCESS:mobileAddress.setText(msg.obj.toString());Toast.makeText(getApplication(), "查询成功", Toast.LENGTH_LONG).show();break;case MSG_FAILURE:mobileAddress.setText(msg.obj.toString());Toast.makeText(getApplication(), "查询失败", Toast.LENGTH_LONG).show();break;}isRunning=false;}};Runnable runnable = new Runnable() {@Overridepublic void run() {// 读取XML文件try {Map<String, String> params = new HashMap<String, String>();String add = WebServicesLib.InvokeWS("http://192.168.1.149:6666/WebServices/SystemRoles.asmx","http://tempuri.org/", "GetAllSystemRoles", params);mHandler.obtainMessage(MSG_SUCCESS, add).sendToTarget();} catch (Exception e) {mHandler.obtainMessage(MSG_FAILURE,e.getMessage()).sendToTarget();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mobileAddress = (TextView) this.findViewById(R.id.mobileAddress);Button btnSearch = (Button) this.findViewById(R.id.btnSearch);btnSearch.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// Android 4.0 之后不能在主线程中请求HTTP请求if (!isRunning) {isRunning=true;mThread = new Thread(runnable);mThread.start();// 线程启动} else {Toast.makeText(getApplication(), "线程已经启动。",Toast.LENGTH_LONG).show();}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}

转载于:https://www.cnblogs.com/carbe/p/3991224.html

Android万能使用WebServices(不用引入外部包)相关推荐

  1. golang 引入外部包的三种方式:go get, go module, vendor目录

    import "github.com/astaxie/beego" 编译出错解决方案: go get:确保你的GOPATH是工程目录,代码在src目录下,然后在命令提示符中输入:g ...

  2. Rust引入外部包,VsCode引入失败,Blocking waiting for file lock on package cache lock

    引入外部包出错的解决方法 VsCode导入包后一直转圈 首先要停掉Rust server Ctrl + Shift + P 快捷键,输入Stop那个,停掉服务 改用命令行,像这样 可以看到它说 Blo ...

  3. android studio 打包aar 与 引入aar包

    一.android studio 打包arr 1. aar包是Android studio 下打包Android工程中src.res.lib后生成的aar文件(与Jar包最大的不同是Jar包不包含资源 ...

  4. go引入外部依赖的三种方式:go get,go module,vendor目录

    本文转载自golang 引入外部包的三种方式:go get, go module, vendor目录_guoguolifang的博客-CSDN博客_golang 外部包 import  "g ...

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

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

  6. ADT17中引入外部JAR包时出现ClassNotFoundException

    在ADT17之前,如果要在Android项目中引入外部JAR包,只需在项目属性的Java Build Path中选择Add External JARs,然后选择相应JAR包即可.但是,在升级到ADT1 ...

  7. 对android小程序的结论,微信小程序引入外部字体总结(针对安卓加载缓慢问题)...

    最近有个项目需求,需要改变小程序所有文字的字体. 查了资料后发现,本地加载字体文件导致小程序太大.动态加载文件,苹果真机完美,但是在安卓的真机上引入的外部字体加载会很慢,会有很明显的默认字体切换到外部 ...

  8. idea引入外部jar,运行项目不报错,使用maven打war包install/package时报程序包不存在等

    项目由于某种特殊原因,需要引入maven中央仓库不存在的jar,这时我们都在WEB-INF/lib下引入,引入外部jar百度一大堆. 我今天碰到是问题是引入jar,项目运行没问题,就是在打war包时报 ...

  9. android.mk 添加v7_Android.mk引入第三方jar包和so库文件的方法

    以SystemUI为例,如果需要在SystemUI中引入第三方jar包以及so库,可作如下处理: 首先,在frameworks\base\packages\SystemUI下新建libs目录: 将需要 ...

最新文章

  1. linux openwrt插件,OpenWrt添加软件包(一)
  2. python不退出运行页面_如何在不完全退出Tkinter窗口的情况下停止正在运行的函数?...
  3. logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作
  4. c语言 sdk,适用于 C 语言的 Azure IoT 设备 SDK
  5. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
  6. C语言内存字节对齐小结
  7. 查询mysql视图_MySQL数据库简介及常用命令
  8. 计算机转财经专业考试考什么,高三对口升学第三次模拟考试财经基础课计算机专业课...
  9. aws lambda使用_使用AWS Lambdas扩展技术堆栈
  10. docker redis 删除集群_基于Docker的Redis集群实践
  11. Kubernetes 小白学习笔记(5)--Kubernetes集群的部署service、部署deployment、自动负载均衡、自动伸缩、版本升级、版本回退
  12. case when then end.sql
  13. JAVA架构师进阶之路
  14. Javascript 设置Cookie
  15. python变现实现新浪微博登陆
  16. 闲的没事,自己动手修改上兴3.2源代码
  17. 左神算法基础class6—题目3拓扑排序
  18. 【算法】leetcode887鸡蛋掉落题之方法二解析
  19. 记录阿里云虚拟主机FTP连接不上的解决办法
  20. 硬盘坏了mysql数据恢复_mysql服务器硬盘损坏后的数据恢复

热门文章

  1. java并发库之Executors常用的创建ExecutorService的几个方法说明
  2. diy 单片机 自动浇花_造个自动浇花装置(完)
  3. 论文笔记--基于 FCM 聚类的跨模态人物图像标注方法-2015
  4. 2022-03-29 软件外包流程
  5. 2021-03-16 转自知乎专栏 https://zhuanlan.zhihu.com/p/24482664
  6. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别
  7. Asp.net MVC 教程汇总
  8. 八款开源Android 游戏引擎介绍
  9. 集群式游戏服务器架构方案设计开发
  10. mysql数据库创建交叉表查询_sql – 我需要知道如何创建交叉表查询