Android调用webservice(线程实现)
来源:互联网 发布:蜂窝移动数据选项漫游 编辑:程序博客网 时间:2024/06/16 04:41
本文是在Android环境下调用c#写的webservice,由于楼主也是入门初学者,所以过程一波三折,由于android4.0后不允许在主线连接网络,直接在主线程中写运行会出错,主线程不能直接访问WebService,需要新建一个线程访问WebService,然后把消息传回更改TextView。所以楼主写一下自己学习他人代码,然后利用线程实现的过程
第一步:新建一个安卓项目,导入webservice所需要的jar包ksoap2-android-assembly-2.4-jar-with-dependencies.jar
第二步:编写布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <TextView android:id="@+id/result" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>第三步:编写WebServiceUtils
public class WebServiceUtils {public static final String WEB_SERVER_URL = "http://192.168.1.100:80/WebService1.asmx";// 含有3个线程的线程池private static final ExecutorService executorService = Executors.newFixedThreadPool(1);// 命名空间private static final String NAMESPACE = "http://tempuri.org/";/** * * @param url * WebService服务器地址 * @param methodName * WebService的调用方法名 * @param properties * WebService的参数 * @param webServiceCallBack * 回调接口 */public static void callWebService(String url, final String methodName,final WebServiceCallBack webServiceCallBack) {// 创建HttpTransportSE对象,传递WebService服务器地址final HttpTransportSE httpTransportSE = new HttpTransportSE(url);// 创建SoapObject对象SoapObject soapObject = new SoapObject(NAMESPACE, methodName);// 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);// 设置是否调用的是.Net开发的WebServicesoapEnvelope.setOutputSoapObject(soapObject);soapEnvelope.dotNet = true;httpTransportSE.debug = true;// 用于子线程与主线程通信的Handlerfinal Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);// 将返回值回调到callBack的参数中webServiceCallBack.callBack((SoapObject) msg.obj);}};// 开启线程去访问WebServiceexecutorService.submit(new Runnable() {@Overridepublic void run() {SoapObject resultSoapObject = null;try {httpTransportSE.call(NAMESPACE + methodName, soapEnvelope);System.out.println("soap envelop"+soapEnvelope.getResponse());if (soapEnvelope.getResponse() != null) {// 获取服务器响应返回的SoapObjectresultSoapObject = (SoapObject) soapEnvelope.bodyIn;}} catch (HttpResponseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (XmlPullParserException e) {e.printStackTrace();} finally {// 将获取的消息利用Handler发送到主线程mHandler.sendMessage(mHandler.obtainMessage(0,resultSoapObject));}}});}public interface WebServiceCallBack {public void callBack(SoapObject result);}}第四步:编写ProgressDialogUtils
public class ProgressDialogUtils {private static ProgressDialog mProgressDialog;/** * 显示ProgressDialog * @param context * @param message */public static void showProgressDialog(Context context, CharSequence message){if(mProgressDialog == null){mProgressDialog = ProgressDialog.show(context, "", message);}else{mProgressDialog.show();}}/** * 关闭ProgressDialog */public static void dismissProgressDialog(){if(mProgressDialog != null){mProgressDialog.dismiss();mProgressDialog = null;}}}第五步:在配置文件AndroidManifest.xml中加入 <uses-permission android:name="android.permission.INTERNET"/>入网许可
最后运行结果
0 0
- Android调用webservice(线程实现)
- Android调用Webservice实现…
- 【Android进阶】Android调用WebService的实现
- Android调用WebService之服务端实现(一)
- Android调用WebService之客户端实现(二)
- android之调用webservice 实现图片上传下载
- Android之调用webservice 实现图片上传下载
- android之调用webservice 实现图片上传
- android之调用webservice 实现图片上传下载
- Android之调用webservice 实现图片上传下载
- android之调用webservice 实现图片上传下载
- android之调用webservice 实现图片上传下载
- android之调用webservice 实现图片上传
- android调用webservice实现手机归属查询
- android之调用webservice 实现图片上传
- android调用webservice实现天气预报查询
- android之调用webservice 实现图片上传
- android之调用webservice 实现图片上传
- 【ASP.NET 插件】分享一款富文本web编辑器UEditor
- leetcode_swap node in pairs
- 项目总结
- Java反射机制的使用
- 哈希表在Top-k问题中的应用--字符串
- Android调用webservice(线程实现)
- 【bzoj3791】作业 dp
- 图像算法工程师三重境界
- Android自定义控件:进度条的四种实现方式(Progress Wheel的解析)(源码 + Demo)
- 2016-5-2至2016-5-8
- javascript学习——使用javascript
- verilog中wire与reg类型的区别
- 转 Linux C 网络编程——多线程的聊天室实现(服务器端)
- TensorFlow 研究实践 三