[英]Android kSOAP web service problem
我正在尝试通过 kSOAP(直接从 Google 下载并包含“.jar”)调用公共 web 服务(w3schools.com/webservices/tempconvert.asmx)。
这是我的代码:
// declarations
private static final String NAMESPACE = "http://tempuri.org/" ;
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String URL = "http://216.128.29.26/webservices/tempconvert.asmx";
// code
try
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
request.addProperty("Celsius", "32");
envelope.setOutputSoapObject(request);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
}
catch(Exception e)
{
e.printStackTrace();
}
此外,“AndroidManifest.xml”包括访问互联网的权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
此外,我的 AVD 可以访问互联网(通过浏览器应用程序尝试过)。
有人可以帮帮我吗? 我已经尝试了大约 6 个小时,但仍然失败。
谢谢!
问题是您正在主线程上进行网络调用,并且在 API 级别 12 中不再允许这样做。 您只需将 ksoap2 调用移动到 AsyncTask 左右。 顺便说一句,任何进行网络访问的东西都会出现这个问题。 这是一个强制的严格模式检查。
好像你在做和我一样的教程。 http://www.vimeo.com/9633556
好像你缺少envelope.dotNet = true;
不完全的。 我以前有过(尝试了至少 5 种不同的方法)。 它没有帮助。 它是 API 版本。 我有 12 个。它没有用。 我在某处发现 kSOAP 仅适用于 8 或更低版本。 Go 图:)
我希望每个遇到这个问题的人都能找到这个问题,以免浪费太多时间使用 12 API。
我刚刚使用 api 版本 10 和 ksoap2 尝试了我自己的代码(仅在其尝试使用的 web 服务中有所不同),它仍然可以按预期工作。
private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
System.out.println("--==Creating SOAP object==--");
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius", "32");
System.out.println("--==Finished Creating SOAP object==--");
System.out.println("--==Creating SOAP envelope==--");
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
System.out.println("--==Finished Creating SOAP envelope==--");
HttpTransportSE aht = new HttpTransportSE(URL);
// aht.debug = true;
try {
System.out.println("--==Creating SOAP call==--");
aht.call(SOAP_ACTION, soapEnvelope);
System.out.println("test");
SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
System.out.println(response.toString());
tableData.addView(resultSoap);
System.out.println("--==Finished Creating SOAP call==--");
} catch (Exception e) {
e.printStackTrace();
}
if (aht.debug == true) {
System.out.println(aht.responseDump);
}
package com.soap;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class SoapsActivity extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tvsoap);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius", "32");
SoapSerializationEnvelope evenlop = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
evenlop.dotNet = true;
evenlop.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
try {
aht.call(SOAP_ACTION, evenlop);
SoapPrimitive resultString = (SoapPrimitive) evenlop.getResponse();
tv.setText("ststus :" + resultString.toString());
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.