直接上代码

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() {
@Override
public 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();
}
}
}; @Override
protected 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() {
@Override
public 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();
}
}
});
} @Override
public 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;
} }

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. contiki-process_run()

    process_run()函数位于main函数中 ) { do { } ); idle_count++; } 找到函数的声明处: /** * Run the system once - call po ...

  2. swift_Dictionary 字典

    // //  main.Swift //  字典 // //  Created by zhangbiao on 14-6-15. //  Copyright (c) 2014年 理想. All rig ...

  3. ps

    快速恢复默认值  有些不擅长Photoshop的朋友为了调整出满意的效果真是几经周折,结果发现还是原来的默认效果最好,这下傻了眼,后悔不该当初呀!怎么恢复到默认值呀?试着轻轻点按选项栏上的工具图标,然 ...

  4. 我是如何反编译D-Link路由器固件程序并发现它的后门的

    OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧. 一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13.使用 ...

  5. JS 劫持来源网站并做指定跳转

    有时候给网站做流量,免不了要做一些网站劫持的JS跳转,这里贴上一段劫持来源网站的JS跳转方法,很简单 <script> // 获取来源网站 var slyar = document.ref ...

  6. AFNetworking到底做了什么?(二)

      接着上一篇的内容往下讲,如果没看过上一篇内容可以点这: AFNetworking到底做了什么? 之前我们讲到NSUrlSession代理这一块: 代理8: /* task完成之后的回调,成功和失败 ...

  7. fiddler监听127.0.0.1或localhost

    localhost/127.0.0.1的请求不会通过任何代理发送,fiddler也就无法截获. 解决方案 1,用 http://localhost. (locahost紧跟一个点号)2,用 http: ...

  8. 解决OS X系统连接VPN后无法访问内网资源的问题

    该问题是第一次使用OS X系统连接VPN遇到的问题,现象是连接VPN成功,但无法访问公司的内网资源. 主要原因还是VPN设置上的问题,在系统偏好设置中打开VPN连接,里面有个高级设置,如图: 点击高级 ...

  9. (转)如何用Maven创建web项目(具体步骤)

    原文链接:http://blog.csdn.net/chuyuqing/article/details/28879477 使用eclipse插件创建一个web project 首先创建一个Maven的 ...

  10. Java线程(七):Callable和Future

    转自:http://blog.csdn.net/ghsau/article/details/7451464 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. C ...