直接上代码

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. 在网站推广的道路中同样的起点,知乎豆瓣却走上了不相交的两条路
  2. 在markdown编辑模式中打出彩色的文字
  3. [C++][IO]读写二进制文件
  4. python字典长度可变吗_Python字典dict实现原理
  5. PyTorch 1.0 中文文档:torch.utils.dlpack
  6. ui kit模板,让新手设计师临摹提高!
  7. Css3 Column实现瀑布流
  8. 期权“不公平”是认识上的错误
  9. JSR-303校验-转载
  10. Ajax学习笔记-请求参数的格式-5
  11. window核心编程 22.3 DIPS.exe的踩坑逻辑梳理
  12. 美区id无法登陆解决方法
  13. Windows 本地安全策略
  14. 我的开源GIS解决方案之路
  15. 计算机英特尔显卡在哪找,Win10英特尔显卡设置图标不见了该怎么办 - 系统之家...
  16. iTunes只能装C盘吗_为什么电脑软件喜欢默认安装在C盘呢?
  17. 解决99%的卡刷包无法通过ROM制作工具修改的问题
  18. 一款APP从设计稿到切图过程全方位揭秘
  19. MySQL派生表联表查询记录
  20. matlab如何表示抗混叠滤波,Matlab在多采样率信号处理教学中的应用

热门文章

  1. 小黄鸭c语言程序代码,新年的小黄鸭 - 题目 - Universal Online Judge
  2. WPF之完美捕捉精灵神器 -- HitTest
  3. GameJS——Game Library written in JavaScript
  4. MFC 教程【1_MFC概述 】
  5. mysql neatbean_使用MySQL的NetBeans中的SQL语法错误
  6. key rocketmq 有什么用_rocketmq 介绍(一)
  7. 【java学习之路】(java框架)010.声明式事务控制
  8. 发布不同类型的话题问题
  9. Android集成Zxing
  10. Spark SQL介绍和特点