0

Android アプリから Web サービスを呼び出そうとしています。Java で Hibernate を使用してレコード (製品バーコード、製品名) を挿入する Web サービスをデプロイし、それをテストするためのアクティビティを作成しました。

AVD で実行すると、 connectionException が発生しました。Connection refused

これが私のコードです:

package com.market_helper.app;

import android.R.string;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
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.ksoap2.serialization.PropertyInfo;

public class Market_helper_androidActivity extends Activity {

    private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/Main";
    private static final String METHOD_NAME = "insertProduct";
    private static final String NAMESPACE = "http://localhost:7675/market_helper/services/";
    private static final String URL = "http://localhost:7675/market_helper/services/Main?wsdl";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.main);

        try {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
           request.addProperty("barCode", "12345");

           request.addProperty("productName", "abc");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);

            Object result = envelope.getResponse();


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

これは Android での初めての Web サービスであり、コードが正しいかどうかわかりません。を呼び出したメソッドを呼び出していinsertProduct(String barCode,String productName)ます。Web サービスは機能しており、テスト済みです。

4

6 に答える 6

1
private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/Main"; 

あなたはLocalHostを与えました

LocalHost の代わりに IP アドレスを試してください

これが好き

   private static final String SOAP_ACTION = "http://10.120.159.87:7675/market_helper/services/Main"; 
于 2011-11-30T04:14:54.183 に答える
0
private static final String URL = "http://localhost:7675/market_helper/services/Main?wsdl";

この行では、URL の末尾に「?wsdl」を配置するのは間違っています。それを削除して、URL の代わりに Web サービスの拡張子 (.asmx または .svc) を末尾に配置します。

private static final String URL = "http://localhost:7675/market_helper/services/Main.asmx";
于 2011-11-30T04:24:35.950 に答える
0

助けてくれてありがとう。ipconfig
コマンドを使用してローカル IP を取得した URL の問題を修正し
ました。ポート 7675 は、Apache Tomcat サーバーで使用されています
。ポートをファイアウォールの例外ポートに追加して、動作することを確認しました。

wsdl を変更した asmx ファイルはありません
。ブラウザから wsdl の説明を確認できます。

名前空間はxmlファイル「main.wsdl」から取得しまし
<schema elementFormDefault="qualified" targetNamespace="http://app.market_helper.com" xmlns="http://www.w3.org/2001/XMLSchema">

た。正しいコードはここ にありますprivate static final String SOAP_ACTION = "http://app.market_helper.com/insertProduct"; private static final String METHOD_NAME = "insertProduct"; private static final String NAMESPACE = "http://app.market_helper.com"; private static final String URL = "http://192.168.1.2:7675/market_helper/services/Main?wsdl";
。これで、AndroidアプリからWebサービスを使用できるようになりました。
私と同じ問題を抱えている人のために、正しいコードを送り返します。

于 2011-11-30T23:16:05.000 に答える
0

あなたの AndroidManifest.xml で、インターネットのアクセス許可が設定されていることを確認してください。これを設定すると、すべてがうまく機能しました。

<uses-permission android:name="android.permission.INTERNET" />
于 2011-11-30T04:18:10.047 に答える
-1
private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/insertProduct"; 

SOAP ACTION=NAMESPACE+METHOD NAME;
于 2011-11-30T04:30:10.670 に答える