误差调用web服务和接收数据 [英] Error With Calling A Web-Service And Receiving Data
本文介绍了误差调用web服务和接收数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试接收数据从web服务
使用这种code,但一个致命的错误发生。
包com.example.lo2i05;进口java.io.IOException异常;
进口android.os.Bundle;
进口android.app.Activity;
进口android.view.Menu;
进口android.view.View;
进口org.ksoap2.SoapEnvelope;
进口org.ksoap2.serialization.SoapObject;
进口org.ksoap2.serialization.SoapPrimitive;
进口org.ksoap2.serialization.SoapSerializationEnvelope;
进口org.ksoap2.transport.HttpTransportSE;
进口org.xmlpull.v1.XmlPullParserException;
进口android.widget.Button;
进口android.widget.TextView;公共类MainActivity延伸活动{
私人静态字符串SOAP_ACTION =http://tempuri.org/CelsiusToFahrenheit;
私人静态字符串NAMESPACE =http://tempuri.org/;
私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
私有静态字符串URL =http://www.w3schools.com/webservices/tempconvert.asmx?WSDL;
私人TextView的电视;
私人按钮BTN; @覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
电视=(的TextView)findViewById(R.id.txt);
BTN =(按钮)findViewById(R.id.btn);
btn.setOnClickListener(新View.OnClickListener()
{
@覆盖
公共无效的onClick(查看arg0中)
{ 最后SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);
request.addProperty(摄氏,32);
最后SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(请求);
envelope.dotNet = TRUE;
尝试
{
HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,信封);
SoapPrimitive结果=(SoapPrimitive)envelope.getResponse();
串R = result.toString();
tv.setText(R);
}
赶上(IOException异常E)
{
tv.setText(1);
}
赶上(XmlPullParserException E)
{
tv.setText(2);
}
}
}); }
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.activity_main,菜单);
返回true;
}}
这是一个LogCat中
11-24 23:04:03.100:W / IInputConnectionWrapper(1155):getSelectedText上的非活动InputConnection
11-24 23:04:03.100:W / IInputConnectionWrapper(1155):setComposingText上的非活动InputConnection
11-24 23:04:03.100:W / IInputConnectionWrapper(1155):getExtractedText上的非活动InputConnection
11-24 23:04:08.135:D / GestureDetector(1155):表面触摸事件] mSweepDown假,mLRSDCnt:-1 mTouchCnt:2 mFalseSizeCnt:0
11-24 23:04:08.165:D / AndroidRuntime(1155):关闭VM
11-24 23:04:08.165:W / dalvikvm(1155):主题ID = 1:螺纹未捕获的异常(组= 0x412862a0)退出
11-24 23:04:08.170:E / AndroidRuntime(1155):致命异常:主要
11-24 23:04:08.170:E / AndroidRuntime(1155):android.os.NetworkOnMainThreadException
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-24 23:04:08.170:E / AndroidRuntime(1155):在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-24 23:04:08.170:E / AndroidRuntime(1155):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-24 23:04:08.170:E / AndroidRuntime(1155):在java.net.InetAddress.getAllByName(InetAddress.java:214)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:70)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpConnection<&初始化GT;(HttpConnection.java:50)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpConnection $ Address.connect(HttpConnection.java:340)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
11-24 23:04:08.170:E / AndroidRuntime(1155):在libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
11-24 23:04:08.170:E / AndroidRuntime(1155):在org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:109)
11-24 23:04:08.170:E / AndroidRuntime(1155):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:157)
11-24 23:04:08.170:E / AndroidRuntime(1155):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
11-24 23:04:08.170:E / AndroidRuntime(1155):在com.example.lo2i05.MainActivity $ 1.onClick(MainActivity.java:46)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.view.View.performClick(View.java:4223)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.view.View $ PerformClick.run(View.java:17275)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.os.Handler.handleCallback(Handler.java:615)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.os.Handler.dispatchMessage(Handler.java:92)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.os.Looper.loop(Looper.java:137)
11-24 23:04:08.170:E / AndroidRuntime(1155):在android.app.ActivityThread.main(ActivityThread.java:4898)
11-24 23:04:08.170:E / AndroidRuntime(1155):在java.lang.reflect.Method.invokeNative(本机方法)
11-24 23:04:08.170:E / AndroidRuntime(1155):在java.lang.reflect.Method.invoke(Method.java:511)
11-24 23:04:08.170:E / AndroidRuntime(1155):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1008)
11-24 23:04:08.170:E / AndroidRuntime(1155):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
11-24 23:04:08.170:E / AndroidRuntime(1155):在dalvik.system.NativeStart.main(本机方法)
11-24 23:09:16.970:I /流程(1155):发送信号。 PID:1155 SIG:9
的Android版本:4.2(果冻豆)
。我添加了一个权限的清单来访问互联网。
新的code(1.0)
包com.example.lo2i05;进口android.os.AsyncTask;
进口android.os.Bundle;
进口android.app.Activity;
进口android.view.Menu;
进口android.view.View;
进口org.ksoap2.SoapEnvelope;
进口org.ksoap2.serialization.SoapObject;
进口org.ksoap2.serialization.SoapSerializationEnvelope;
进口org.ksoap2.transport.HttpTransportSE;
进口android.widget.Button;
进口android.widget.TextView;公共类MainActivity延伸活动{
私人静态字符串SOAP_ACTION =http://tempuri.org/CelsiusToFahrenheit;
私人静态字符串NAMESPACE =http://tempuri.org/;
私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
私有静态字符串URL =http://www.w3schools.com/webservices/tempconvert.asmx?WSDL;
私人TextView的电视;
私人按钮BTN; @覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
电视=(的TextView)findViewById(R.id.txt);
BTN =(按钮)findViewById(R.id.btn);
btn.setOnClickListener(新View.OnClickListener()
{
@覆盖
公共无效的onClick(查看arg0中)
{
最后SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);
request.addProperty(摄氏,32);
最后SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(请求);
envelope.dotNet = TRUE;
新的AsyncTask<太虚,太虚,布尔>(){
SoapObject OBJ; @覆盖
保护布尔doInBackground(虚空...... PARAMS){
//这里你可以做你的后台网络工作
尝试{HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,信封);
OBJ =(SoapObject)envelope.getResponse();
返回true; }
赶上(例外五){e.printStackTrace();
返回false;}}
@覆盖
保护无效onPostExecute(布尔结果){
//这里你可以做你的UI工作
如果(!结果)
tv.setText(错误);
其他
tv.setText(obj.getProperty(0)的ToString());
super.onPostExecute(结果);
}
}。执行();
}
}); }
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.activity_main,菜单);
返回true;
}}
=======================================
LogCat中
11-24 23:37:34.120:E /跟踪(2671):错误打开跟踪文件:没有这样的文件或目录(2)
11-24 23:37:34.235:D / libEGL(2671):加载/system/lib/egl/libEGL_mali.so
11-24 23:37:34.240:D / libEGL(2671):加载/system/lib/egl/libGLESv1_CM_mali.so
11-24 23:37:34.240:D / libEGL(2671):加载/system/lib/egl/libGLESv2_mali.so
11-24 23:37:34.245:D /(2671):设备驱动程序API匹配
11-24 23:37:34.245:D /(2671):设备驱动程序API版本:10
11-24 23:37:34.245:D /(2671):用户空间API版本:10
11-24 23:37:34.245:D /(2671):马里:版本=的Linux r2p4-02rel0 BUILD_DATE =周三09月12日17时53分53秒KST 2012
11-24 23:37:34.275:D / OpenGLRenderer(2671):启用调试模式0
11-24 23:37:35.895:D / GestureDetector(2671):表面触摸事件] mSweepDown假,mLRSDCnt:-1 mTouchCnt:2 mFalseSizeCnt:0
11-24 23:37:50.615:W / System.err的(2671):java.lang.ClassCastException:org.ksoap2.serialization.SoapPrimitive不能转换为org.ksoap2.serialization.SoapObject
11-24 23:37:50.615:W / System.err的(2671):在com.example.lo2i05.MainActivity $ 1 $ 1.doInBackground(MainActivity.java:48)
11-24 23:37:50.615:W / System.err的(2671):在com.example.lo2i05.MainActivity $ 1 $ 1.doInBackground(MainActivity.java:1)
11-24 23:37:50.620:W / System.err的(2671):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
11-24 23:37:50.620:W / System.err的(2671):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
11-24 23:37:50.620:W / System.err的(2671):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-24 23:37:50.620:W / System.err的(2671):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
11-24 23:37:50.620:W / System.err的(2671):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-24 23:37:50.620:W / System.err的(2671):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
11-24 23:37:50.620:W / System.err的(2671):在java.lang.Thread.run(Thread.java:856)
11-24 23:38:05.935:W / IInputConnectionWrapper(2671):getSelectedText上的非活动InputConnection
11-24 23:38:05.935:W / IInputConnectionWrapper(2671):setComposingText上的非活动InputConnection
11-24 23:38:05.935:W / IInputConnectionWrapper(2671):getExtractedText上的非活动InputConnection
解决方案
尝试以异步方式是这样的:
公共类MainActivity延伸活动{
私人静态字符串SOAP_ACTION =http://tempuri.org/CelsiusToFahrenheit;
私人静态字符串NAMESPACE =http://tempuri.org/;
私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
私有静态字符串URL =http://www.w3schools.com/webservices/tempconvert.asmx?WSDL;
私人TextView的电视;
私人按钮BTN;@覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
电视=(的TextView)findViewById(R.id.txt);
BTN =(按钮)findViewById(R.id.btn);
btn.setOnClickListener(新View.OnClickListener()
{
@覆盖
公共无效的onClick(查看arg0中)
{
新MyTask()执行();
}
});
}
公共类MyTask扩展的AsyncTask<太虚,太虚,字符串> { ProgressDialog进展情况;
串响应=; 在preExecute公共无效(){ super.on preExecute();
} @覆盖
保护Stirng doInBackground(虚空......为arg0){
最后SoapObject要求=新SoapObject空间(namespace,METHOD_NAME);
request.addProperty(摄氏,32);
最后SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(请求);
envelope.dotNet = TRUE;
尝试
{
HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,信封);
SoapPrimitive结果=(SoapPrimitive)envelope.getResponse();
响应= result.toString(); }
赶上(IOException异常E)
{
响应=1;
}
赶上(XmlPullParserException E)
{
响应=2;
} 返回响应;
}
@覆盖
公共无效onPostExecute(字符串RES){ 如果(!(res.equalsIgnoreCase()))
{
tv.setText(RES);
} }
}
}
刚才试试这个
I Try To Receive Data From A Web-Service Using This Code But An Fatal-Error Occurred
package com.example.lo2i05;
import java.io.IOException;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
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.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private static String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "CelsiusToFahrenheit";
private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
private TextView tv;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.txt);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius","32");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
String r = result.toString();
tv.setText(r);
}
catch (IOException e)
{
tv.setText("1");
}
catch (XmlPullParserException e)
{
tv.setText("2");
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
This Is A LogCat
11-24 23:04:03.100: W/IInputConnectionWrapper(1155): getSelectedText on inactive InputConnection
11-24 23:04:03.100: W/IInputConnectionWrapper(1155): setComposingText on inactive InputConnection
11-24 23:04:03.100: W/IInputConnectionWrapper(1155): getExtractedText on inactive InputConnection
11-24 23:04:08.135: D/GestureDetector(1155): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 2 mFalseSizeCnt:0
11-24 23:04:08.165: D/AndroidRuntime(1155): Shutting down VM
11-24 23:04:08.165: W/dalvikvm(1155): threadid=1: thread exiting with uncaught exception (group=0x412862a0)
11-24 23:04:08.170: E/AndroidRuntime(1155): FATAL EXCEPTION: main
11-24 23:04:08.170: E/AndroidRuntime(1155): android.os.NetworkOnMainThreadException
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-24 23:04:08.170: E/AndroidRuntime(1155): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-24 23:04:08.170: E/AndroidRuntime(1155): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-24 23:04:08.170: E/AndroidRuntime(1155): at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
11-24 23:04:08.170: E/AndroidRuntime(1155): at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
11-24 23:04:08.170: E/AndroidRuntime(1155): at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:109)
11-24 23:04:08.170: E/AndroidRuntime(1155): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:157)
11-24 23:04:08.170: E/AndroidRuntime(1155): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
11-24 23:04:08.170: E/AndroidRuntime(1155): at com.example.lo2i05.MainActivity$1.onClick(MainActivity.java:46)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.view.View.performClick(View.java:4223)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.view.View$PerformClick.run(View.java:17275)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.os.Handler.handleCallback(Handler.java:615)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.os.Handler.dispatchMessage(Handler.java:92)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.os.Looper.loop(Looper.java:137)
11-24 23:04:08.170: E/AndroidRuntime(1155): at android.app.ActivityThread.main(ActivityThread.java:4898)
11-24 23:04:08.170: E/AndroidRuntime(1155): at java.lang.reflect.Method.invokeNative(Native Method)
11-24 23:04:08.170: E/AndroidRuntime(1155): at java.lang.reflect.Method.invoke(Method.java:511)
11-24 23:04:08.170: E/AndroidRuntime(1155): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
11-24 23:04:08.170: E/AndroidRuntime(1155): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
11-24 23:04:08.170: E/AndroidRuntime(1155): at dalvik.system.NativeStart.main(Native Method)
11-24 23:09:16.970: I/Process(1155): Sending signal. PID: 1155 SIG: 9
Android Version : 4.2 (Jelly Bean).
I Added A Permission To the Manifest To Access The Internet .
New CODE (1.0)
package com.example.lo2i05;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private static String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "CelsiusToFahrenheit";
private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
private TextView tv;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.txt);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius","32");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
new AsyncTask<Void, Void, Boolean>() {
SoapObject obj;
@Override
protected Boolean doInBackground(Void... params) {
//here you can do your background network job
try{ HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
obj = (SoapObject)envelope.getResponse();
return true; }
catch (Exception e) {e.printStackTrace();
return false;}}
@Override
protected void onPostExecute(Boolean result) {
//here you can do your UI job
if (!result)
tv.setText("Error");
else
tv.setText(obj.getProperty(0).toString());
super.onPostExecute(result);
}
}.execute();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
=======================================
LogCat
11-24 23:37:34.120: E/Trace(2671): error opening trace file: No such file or directory (2)
11-24 23:37:34.235: D/libEGL(2671): loaded /system/lib/egl/libEGL_mali.so
11-24 23:37:34.240: D/libEGL(2671): loaded /system/lib/egl/libGLESv1_CM_mali.so
11-24 23:37:34.240: D/libEGL(2671): loaded /system/lib/egl/libGLESv2_mali.so
11-24 23:37:34.245: D/(2671): Device driver API match
11-24 23:37:34.245: D/(2671): Device driver API version: 10
11-24 23:37:34.245: D/(2671): User space API version: 10
11-24 23:37:34.245: D/(2671): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Wed Sep 12 17:53:53 KST 2012
11-24 23:37:34.275: D/OpenGLRenderer(2671): Enabling debug mode 0
11-24 23:37:35.895: D/GestureDetector(2671): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 2 mFalseSizeCnt:0
11-24 23:37:50.615: W/System.err(2671): java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObject
11-24 23:37:50.615: W/System.err(2671): at com.example.lo2i05.MainActivity$1$1.doInBackground(MainActivity.java:48)
11-24 23:37:50.615: W/System.err(2671): at com.example.lo2i05.MainActivity$1$1.doInBackground(MainActivity.java:1)
11-24 23:37:50.620: W/System.err(2671): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-24 23:37:50.620: W/System.err(2671): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-24 23:37:50.620: W/System.err(2671): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-24 23:37:50.620: W/System.err(2671): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-24 23:37:50.620: W/System.err(2671): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-24 23:37:50.620: W/System.err(2671): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-24 23:37:50.620: W/System.err(2671): at java.lang.Thread.run(Thread.java:856)
11-24 23:38:05.935: W/IInputConnectionWrapper(2671): getSelectedText on inactive InputConnection
11-24 23:38:05.935: W/IInputConnectionWrapper(2671): setComposingText on inactive InputConnection
11-24 23:38:05.935: W/IInputConnectionWrapper(2671): getExtractedText on inactive InputConnection
解决方案
Try to asynchronously like this:
public class MainActivity extends Activity {
private static String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "CelsiusToFahrenheit";
private static String URL = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL";
private TextView tv;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.txt);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
new MyTask().execute();
}
});
}
public class MyTask extends AsyncTask<Void, Void, String> {
ProgressDialog progress;
String response = "";
public void onPreExecute() {
super.onPreExecute();
}
@Override
protected Stirng doInBackground(Void... arg0) {
final SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Celsius","32");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
response = result.toString();
}
catch (IOException e)
{
response = "1";
}
catch (XmlPullParserException e)
{
response = "2";
}
return response;
}
@Override
public void onPostExecute(String res) {
if(!(res.equalsIgnoreCase("")))
{
tv.setText(res);
}
}
}
}
Just try this now
这篇关于误差调用web服务和接收数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文