从KSOAP错误的Andr​​oid通话SOAP服务 [英] Call SOAP service from android with ksoap error

查看:207
本文介绍了从KSOAP错误的Andr​​oid通话SOAP服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对谷歌App Engine上运行一个Web服务,我就从Android设备调用可用的服务。我一直遵循与合并有关KSoap2最教程code,但我仍然获得Android的一个例外。这是code:

 私有静态字符串METHOD_NAME =的getData;
私人静态字符串SOAP_ACTION =htt​​p://example.com/getData;
私人静态字符串WSDL_URL =htt​​p://arduino-data-server.appspot.com/FunctionsService.wsdl;
私人静态字符串NAMESPACE =htt​​p://example.com/;SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);SoapSerializationEnvelope信封=新SoapSerializationEnvelope(
            SoapEnvelope.VER12);
envelope.setOutputSoapObject(请求);HttpTransportSE androidHttpTransport =新HttpTransportSE(WSDL_URL);
尝试{
androidHttpTransport.call(SOAP_ACTION,信封);SoapObject结果=(SoapObject)envelope.getResponse();
如果(结果!= NULL){
    TextView的T =(TextView中)this.findViewById(R.id.text_view);    t.se​​tText(SOAP响应:\\ n \\ n+ result.getProperty(0)的ToString());
}
}赶上(IOException异常五){
// TODO自动生成catch块
e.printStackTrace();
}赶上(XmlPullParserException E){
// TODO自动生成catch块
e.printStackTrace();
}

这就是错误日志:

  09-03 18:09:04.805:W / dalvikvm(28352):主题ID = 1:螺纹未捕获的异常(组= 0x41909700)退出
09-03 18:09:04.821:E / AndroidRuntime(28352):致命异常:主要
09-03 18:09:04.821:E / AndroidRuntime(28352):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.provasoap / com.example.provasoap.MainActivity}:android.os.NetworkOnMainThreadException
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.os.Handler.dispatchMessage(Handler.java:99)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.os.Looper.loop(Looper.java:137)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread.main(ActivityThread.java:5103)
09-03 18:09:04.821:E / AndroidRuntime(28352):在java.lang.reflect.Method.invokeNative(本机方法)
09-03 18:09:04.821:E / AndroidRuntime(28352):在java.lang.reflect.Method.invoke(Method.java:525)
09-03 18:09:04.821:E / AndroidRuntime(28352):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
09-03 18:09:04.821:E / AndroidRuntime(28352):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-03 18:09:04.821:E / AndroidRuntime(28352):在dalvik.system.NativeStart.main(本机方法)
09-03 18:09:04.821:E / AndroidRuntime(28352):由:android.os.NetworkOnMainThreadException
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
09-03 18:09:04.821:E / AndroidRuntime(28352):在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
09-03 18:09:04.821:E / AndroidRuntime(28352):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
09-03 18:09:04.821:E / AndroidRuntime(28352):在java.net.InetAddress.getAllByName(InetAddress.java:214)
。09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:70)
。09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:50)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
09-03 18:09:04.821:E / AndroidRuntime(28352):在libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
09-03 18:09:04.821:E / AndroidRuntime(28352):在org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:126)
09-03 18:09:04.821:E / AndroidRuntime(28352):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:179)
09-03 18:09:04.821:E / AndroidRuntime(28352):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
09-03 18:09:04.821:E / AndroidRuntime(28352):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
09-03 18:09:04.821:E / AndroidRuntime(28352):在com.example.provasoap.MainActivity.onCreate(MainActivity.java:47)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.Activity.performCreate(Activity.java:5133)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-03 18:09:04.821:E / AndroidRuntime(28352):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-03 18:09:04.821:E / AndroidRuntime(28352):... 11个


解决方案

试试吧..

尝试使用下面的code你mainactivityactivity低于在的setContentView()来避免networkOnmainThread例外。

 如果(android.os.Build.VERSION.SDK_INT> 9){
                。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();
                StrictMode.setThreadPolicy(政策);
            }

不过,在做内部使用的AsyncTask不阻塞主线程后台线程操作重将是巨大的!

和还提到此链接...

的AsyncTask的Andr​​oid例如

I have a webservice running on Google app engine, and i would to call a available service from an android device. I've follow and merge code of most tutorial about KSoap2, but i still obtain an exception on android. this is the code:

private static String METHOD_NAME = "getData";
private static String SOAP_ACTION = "http://example.com/getData";
private static String WSDL_URL = "http://arduino-data-server.appspot.com/FunctionsService.wsdl";
private static String NAMESPACE = "http://example.com/";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER12);
envelope.setOutputSoapObject(request);

HttpTransportSE androidHttpTransport = new HttpTransportSE(WSDL_URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);

SoapObject result = (SoapObject) envelope.getResponse();
if (result != null) {
    TextView t = (TextView) this.findViewById(R.id.text_view);

    t.setText("SOAP response:\n\n"+ result.getProperty(0).toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

and that's the error log:

09-03 18:09:04.805: W/dalvikvm(28352): threadid=1: thread exiting with uncaught exception (group=0x41909700)
09-03 18:09:04.821: E/AndroidRuntime(28352): FATAL EXCEPTION: main
09-03 18:09:04.821: E/AndroidRuntime(28352): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.example.provasoap/com.example.provasoap.MainActivity}: android.os.NetworkOnMainThreadException
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.os.Looper.loop(Looper.java:137)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread.main(ActivityThread.java:5103)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at java.lang.reflect.Method.invokeNative(Native Method)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at java.lang.reflect.Method.invoke(Method.java:525)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at dalvik.system.NativeStart.main(Native Method)
09-03 18:09:04.821: E/AndroidRuntime(28352): Caused by: android.os.NetworkOnMainThreadException
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:126)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:179)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at com.example.provasoap.MainActivity.onCreate(MainActivity.java:47)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.Activity.performCreate(Activity.java:5133)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-03 18:09:04.821: E/AndroidRuntime(28352):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
09-03 18:09:04.821: E/AndroidRuntime(28352):    ... 11 more

解决方案

Try it..

Try using the below code inside your mainactivityactivity below setContentView() to avoid networkOnmainThread exception..

if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }

But, doing heavy operation inside background thread using AsyncTask without blocking main thread would be great!

And also refer this link...

AsyncTask Android example

这篇关于从KSOAP错误的Andr​​oid通话SOAP服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆