簡體   English   中英

Android webservice訪問錯誤

[英]Android webservice access error

我在 Tomcat7 服務器上部署了一個簡單的 java web 服務。 我將 Axis2 用作 soap 引擎。(Web 服務和 WSDL 可以)這是我用於 web 服務的代碼

  public class TestWs {
  public String sayHello(){
         return "Hello Grant";
    }
   }

我已經從 Android 2.2 訪問了這個 web 服務。它完全可以。但是這個程序不適用於 Android 4.0.3 我的 Android 程序的代碼

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 android.widget.TextView;
import android.app.Activity;
import android.os.Bundle;

public class AndroidWSClientActivity extends Activity {

private static final String SOAP_ACTION = "http://ws.android4.com/";
private static final String METHOD_NAME = "sayHello";
private static final String NAMESPACE = "http://ws.android4.com/sayHello/";
private static final String URL = "http://175.157.45.91:8085/ForAndroid4/services/TestWs?wsdl";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);          

    SoapSerializationEnvelope envelope = new 
    SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject(request);

    HttpTransportSE ht = new HttpTransportSE(URL);
    try {
        ht.call(SOAP_ACTION, envelope);
        SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
        String str = response.toString();
        TextView result;
        result = (TextView)findViewById(R.id.textView1);
        result.setText(str);

    } catch (Exception e) {
        e.printStackTrace();
        TextView result;
        result = (TextView)findViewById(R.id.textView1);
        result.setText("Error!");

    }
  }
 }

程序正確安裝在模擬器上。 但是模擬器顯示了來自 catch 塊的消息集。 錯誤是什么??? 我該如何糾正? 謝謝!

在 Honeycomb and Ice Cream Sandwich(即 Android 3.0+)中,您無法在主線程(onCreate()、onPause()、onResume() 等)中連接到 inte.net,您必須啟動一個新線程. 之所以發生這種變化,是因為網絡操作會使應用程序等待很長時間,如果您在主線程中運行它們,整個應用程序將變得無響應。 如果您嘗試從主線程連接, Android 將拋出 NetworkOnMainThreadException。

在最新的 android 版本中,不可能從 UI 線程調用 web 服務。有一個與此相關的類似線程。

Android kSOAP web 服務問題

可能這會對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM