0

wcf Web サービスにアクセスするためのコードが Android アプリで機能しません:

私が持っている上に:

private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.86.164.102/ABCWcfService/ABCWcfService.svc";
private static final String SOAP_ACTION = "http://tempuri.org/IABCWcfService/GetTitle";
private static final String METHOD_NAME = "GetTitle";

次に、私が持っている方法で:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;

try
{
    androidHttpTransport.call(SOAP_ACTION, envelope);
    SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
    String receivedString = result.toString();
}
catch (Exception e)
{
}

行 androidHttpTransport.call(SOAP_ACTION, エンベロープ); の後に例外が発生することがわかりました。しかし、e の値は null です。

Java プロジェクトで同じコードを使用して同じ wcf Web サービスにアクセスすると、正常に動作します。

私は追加しました:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-sdk android:minSdkVersion="8" />
<application>
     ....
</application>

アプリケーション セクションの前のマニフェスト ファイル内。しかし、まだ機能しません。

私はインターネット上でさまざまなスレッドをたくさん読みました。それらのどれも私の問題を解決しません。誰かがより良い提案を得ましたか?ありがとうございました。

Web サービスは、Android アプリと同じマシンで実行されています。

4

1 に答える 1

0

なぜあなたの例外がnullなのか、私はまだ少し困惑しています。これをデバイスで試しましたか、それともエミュレータでのみ試しましたか?

例外が常に nullである理由Exception eについては、この質問で説明できます。簡単な答え: エミュレーターは、受け取った例外を理解していない可能性があり、実際の例外を a に置き換えている可能性があります。null

AndroidアプリはWebサービスと同じマシン上にあるとおっしゃっていたので、これをエミュレーターで実行していると読みましたよね?これを実際のデバイスで実行してみて、デバイスのログに役立つものがあるかどうかを確認してください。

Log.e(TAG, "caught exception " + e);

スタックトレースを取得できれば、これを解決するのはずっと簡単になります。

メインスレッドでネットワーク呼び出しを使用することに関する問題は、その質問のリンクで対処されています。アプリケーションの応答性に影響するため、基本的にメイン スレッドからネットワーク呼び出しを行うことはお勧めできません。一部の SDK バージョン (API レベルが 10 を超えるもの、つまり Honeycomb 以上) では、NetworkOnMainThreadExceptionがスローされ、エミュレーターがそれを理解できない可能性があるため、null に置き換えられます。

<uses-sdk>ただし、リストの値が 8 であるため、その質問に対する回答では、表示されている内容を完全に説明できない場合がminSdkVersionあります (いいえtargetSdkVersion、それでも問題ないはずです)。

スタック トレースを取得できる場合は、これについて詳しく調べることができるかどうか見てみましょう。

于 2012-07-20T14:40:01.393 に答える