总结要点如下
1)AsyncTask 异步访问网络,不然报错
2)测试的webservice端口我设置为:1234 或者7890,其它手动设定的端口,应该行,不过没测试那么多端口。备注:之前自动生成的端口老报错
3)本机测试,地址不能用127.0.0.1 或者localhost,用10.0.0.2,虚拟机里面才能判断是本机电脑
4)SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 用soapobject报错。
5)调用webservice第三方包用到的是:ksoap2....jar
</pre><pre class="java" name="code">package com.example.testinternet;
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
public class WebServiceUtil {
<span style="color:#ff0000;">String url = "http://10.0.2.2:7890/WebService1.asmx";
</span> String methodName = "HelloWorld2";
String namespace = "http://myservicenamespace/";
public MyListener<String> _listener;
// public class runhost implements Runnable {
//
// @Override
// public void run() {
// // TODO Auto-generated method stub
//
// }
//
// }
public Context _context;
public WebServiceUtil(Context context) {
_listener = new MyListener<String>() {
@Override
public void getResult(String t) {
// TODO Auto-generated method stub
}
};
_context = context;
}
public void callWS() {
new callwebservice().execute("江西");
}
<span style="color:#ff0000;">public class callwebservice extends AsyncTask<Object, Void, String> {
</span>
@Override
protected String doInBackground(Object... arg0) {
// TODO Auto-generated method stub
// Toast.makeText(_context, "this is in doinbackground",
// Toast.LENGTH_LONG).show();
return call().toString();
// return "";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Toast.makeText(_context, result, Toast.LENGTH_LONG).show();
}
}
public Object call() {
SoapObject request = new SoapObject(namespace, methodName);
request.addProperty("id ", 1);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true;
HttpTransportSE ht = new HttpTransportSE(url);
try {
ht.call(namespace + methodName, envelope);
if (envelope.getResponse() != null) {
<span style="color:#ff0000;">SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
</span> String result = response.toString();
return result;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
// Log.e("error", e.getMessage());
return "";
}
return "";
}
}
</pre><pre class="java" name="code">webservice 代码为:WebService1.asmx
</pre><pre class="java" name="code"><pre class="csharp" name="code">namespace WebApplication3
{
/// <summary>
///WebService1 的摘要描述
/// </summary>
[WebService(Namespace = "http://myservicenamespace/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下列一行。
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string HelloWorld2(int id)
{
if(id==1)
return "Hello World";
return null;
}
}
}