android Q,Android萬能使用WebServices(不用引入外部包)

 2023-11-18 阅读 25 评论 0

摘要:直接上代碼 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.

直接上代碼

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;}}

android Q。?

轉載于:https://www.cnblogs.com/carbe/p/3991224.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/175251.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息