ksoap2android 下载链接:https://pan.baidu.com/s/1miDvwA8 密码:5obq
webservices准备就绪:
一、添加引用
二、新建类GetDataTask继承AsyncTask<传入参数类型,进度单位(一般为Integer),返回结果>
package com.sdtimoniyor.ticketsystem.WebServices; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.speech.tts.Voice; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.sdtimoniyor.ticketsystem.R; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; public class WebServiceHome extends AppCompatActivity { private TextView tx; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webservice_home); Button showbtn = (Button) findViewById(R.id.webservices_btn); tx = (TextView) findViewById(R.id.data); tx.setText("yyyyyyyy"); showbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new GetDataTask().execute(); } }); } class GetDataTask extends AsyncTask<String, Integer, String> { public String result; @Override protected String doInBackground(String... params) { try { result = GetDB(); } catch (Exception e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(String s) { tx.setText(s); } public String GetDB() { String WebServicesUrl = "http://192.168.0.117/WebService.asmx"; //WebServices地址 String NameSpace = "http://SDTIWebServices/"; //命名空间 String MethodName = "GetTicketListAll"; //方法名 SoapObject request = new SoapObject(NameSpace, MethodName);
//设置需调用WebService接口需要传入的两个参数mobileCode、userId
//request.addProperty("mobileCode", phoneSec);
//request.addProperty("userId", "");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true HttpTransportSE httpTransportSE = new HttpTransportSE(WebServicesUrl); try { httpTransportSE.call(null, envelope);//调用 } catch (Exception e) { e.printStackTrace(); } SoapObject object = (SoapObject) envelope.bodyIn;// 获取返回的数据 result = object.getProperty(0).toString();// 获取返回的结果 return result; } } }
效果展示
记得添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
说下我遇到的问题
1.C# 写的基于.net3.5的webservice接口,JsonConvert.SerializeObject()序列化后本地测试(IIS10)没有问题,但是发布到虚拟主机上(IIS6 .net3.5)上后请求接口返回500请求失败,但是自己把数据拼接Json返回却又不会报错,猜测Newtonsoft.Json版本太高,.net版本太低造成。
2.Android调用时候命名空间写法最后带斜杠,不带有些版本会报错,可以自己试试。