2

私は ksoap2 が初めてで、w3 の学校の例を動作させようとしています。何らかの理由で、この行では常に失敗します。

SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

失敗の原因がわかりません。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.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class WebServiceTurorialActivity extends Activity implements OnClickListener{

private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
private static final String METHOD_NAME = "CelsiusToFahrenheit";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    (findViewById(R.id.button1)).setOnClickListener(this);
}


public void onClick(View v) {
    int a;
    int b;
    try
    { 
        // EditText ed1=(EditText)findViewById(R.id.editText1);
        // EditText ed2=(EditText)findViewById(R.id.editText2); 
        // a = Integer.parseInt(ed1.getText().toString());
        // b = Integer.parseInt(ed2.getText().toString()); 

         SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
         //Request.addProperty("a", a);
        // Request.addProperty("b", b);
         Request.addProperty("Celsius", "32");

         SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
         soapEnvelope.dotNet = true;
         soapEnvelope.setOutputSoapObject(Request);

         HttpTransportSE transport= new HttpTransportSE(URL);

         transport.call(SOAP_ACTION, soapEnvelope);
         SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();

         Toast.makeText(this,"200 " + resultString,Toast.LENGTH_SHORT).show();

     }catch(Exception ex) {
         Toast.makeText(this,"FALSE",Toast.LENGTH_SHORT).show();
     }
} 

}

4

5 に答える 5

4

私も同じ問題を抱えていました。それは私のために働きます:

前の答えが言ったように:

  • ビルドパスで、すべてのライブラリ(jarファイル)をクリアします。
  • プロジェクトのメインディレクトリにフォルダを作成し、「libs」(「lib」ではない)という名前を付けます。
  • これで、EclipseADTプラグインがjarファイルをビルドパスに追加します

私にとっては本当ではありません。私のやり方:

  1. ビルドパスで「ksoap2-android-assembly-2.xx-jar-with-dependencies.jar」を削除します
  2. [OK]をクリックします(表示されているエラーを無視します)
  3. プロジェクトのメインディレクトリに「libs」フォルダを作成します
  4. JARファイルをこのディレクトリにコピーします(!)
  5. ビルドパスに、このディレクトリを含むJARファイルを追加します
于 2012-05-02T20:49:49.643 に答える
3

この問題を抱えているすべての人のために...私はこの問題を何時間も解決しようとしましたが、私の欠点が何であるかを検出しました:ksoap2ライブラリを正しくダウンロードしなかったため、21KBのjarファイルしかありませんでした、ただし、正しいjarファイルは約150KBです。したがって、ファイルを正しくダウンロードするようにしてください。

于 2012-10-22T22:17:10.787 に答える
1

Android で SOAP サービスを呼び出す別の SOAP ライブラリを作成しました。プロジェクトの名前は AndroidSOAP ( http://wiki.javaforum.hu/display/ANDROIDSOAP/Home ) です。

今日、バージョン 0.0.5 をリリースしました。チェックしてください: http://wiki.javaforum.hu/display/ANDROIDSOAP/2012/05/01/Version+0.0.5+released

于 2012-05-01T15:24:07.770 に答える
1
  • ビルド パスで、すべてのライブラリ (jar ファイル) をクリアします。
  • プロジェクトのメイン ディレクトリにフォルダを作成し、「libs」(「lib」ではなく) という名前を付けます。
  • これで、Eclipse ADT プラグインが jar ファイルをビルド パスに追加します。
  • ハッピーコーディング

それでも同じ問題が発生する場合は、これらのクラスを試してください (私にとってはうまくいきます):

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String fahrenheit = CelsiusToFahrenheitWs.celsiusToFahrenheit("32");
        Toast.makeText(getApplicationContext(), fahrenheit, Toast.LENGTH_SHORT).show();
    }
}

public class CelsiusToFahrenheitWs {
    private static final String METHOD_NAME = "CelsiusToFahrenheit";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
    private static final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

    public static String celsiusToFahrenheit(String celsius) {
        String fahrenheit = null;

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("Celsius", celsius);

        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 response = (SoapPrimitive) envelope.getResponse();
            fahrenheit = response.toString();
        } catch (Exception e) {
            e.printStackTrace();
            fahrenheit = null;
        }
        return fahrenheit;
    }
}
于 2012-04-26T07:50:39.330 に答える
0

W3Schools.com は tempuri.org として NAMESPACE を受け入れなくなり、コードで SOAP 例外が発生しました。NAMESPACE には " http://www.w3schools.com/webservices/ " を、SOAP_ACTIONには " http://www.w3schools.com/webservices/CelsiusToFahrenheit "を使用する必要があります。

これが助けになることを願っています!

于 2013-12-30T17:19:23.883 に答える