误差调用web服务和接收数据 [英] Error With Calling A Web-Service And Receiving Data

查看:172
本文介绍了误差调用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 =htt​​p://tempuri.org/CelsiusToFahrenheit;
    私人静态字符串NAMESPACE =htt​​p://tempuri.org/;
    私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
    私有静态字符串URL =htt​​p://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

的Andr​​oid版本: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 =htt​​p://tempuri.org/CelsiusToFahrenheit;
    私人静态字符串NAMESPACE =htt​​p://tempuri.org/;
    私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
    私有静态字符串URL =htt​​p://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 =htt​​p://tempuri.org/CelsiusToFahrenheit;
私人静态字符串NAMESPACE =htt​​p://tempuri.org/;
私人静态字符串METHOD_NAME =CelsiusToFahrenheit;
私有静态字符串URL =htt​​p://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屋!

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