0

HI は、Android アプリケーションから Web サービスを呼び出そうとしています。

PersonAndroid アプリケーションから呼び出し元の Web サービスにシリアライズ可能なオブジェクトを渡しています。サーバー側では、このシリアライズ可能なオブジェクトを取得し、そこでいくつかの変更を行っています。

しかし、問題は、Android アプリの実行時に次のような例外が表示されていることです。 java.lang.RuntimeException: Cannot serialize: com.test.android.Person@43950fe0

これを解決する方法がわかりません。どちらの側も、パラメーターの設定と取得にシリアライズ可能なオブジェクトを使用しています。

以下は、使用している Person クラスです

public class Person implements Serializable{

private String firstName;
private String lastame;

public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastame() {
    return lastame;
}
public void setLastame(String lastame) {
    this.lastame = lastame;
}

}

Android側の私のWebサービス実装クラス:

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

    SoapSerializationEnvelope envelope = 
        new SoapSerializationEnvelope(SoapEnvelope.VER11); 

    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    androidHttpTransport.call(SOAP_ACTION, envelope);

    SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;

シリアル化可能なオブジェクトを parameter として渡すと、この行でエラーが発生しandroidHttpTransport.call(SOAP_ACTION, envelope);ますが、param が String、int などの通常のオブジェクトである場合、問題は発生しません。

この問題を解決する方法を教えてください。

4

3 に答える 3

1

何もしない場合でも、デフォルトのコンストラクターを追加する必要があります。それ以外の場合、シリアライズ可能とは見なされません

コード:

public class Person implements Serializable{

    private String firstName;
    private String lastame;

    private Person() {}

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastame() {
        return lastame;
    }
    public void setLastame(String lastame) {
        this.lastame = lastame;
    }
}
于 2012-01-13T14:02:49.743 に答える
0

ここでKvmSerializable インターフェースを実装してみてください。ここに 2 つの非常に明確なチュートリアルがあり、うまくいけば役に立ちます :)

于 2012-07-17T10:06:57.950 に答える
0

シリアル化可能なインターフェイスを効果的に使用したい場合は、良い方法に従うことが非常に重要です。良い例をここに示します: http://www.jondev.net/articles/Android_Serialization_Example_(Java)

実装するときは、厳密にすることが非常に重要です。

幸運を!より良い応答が必要な場合は、より多くのコードを表示する必要があります。ここで、あなたのクラスはシリアル化するのに適していますが、それはあなたの作り方次第です!

編集:確かにアデル、良い点です!

編集2:ここと同じ問題のようです:

HttpTransportSE requestDump が NullPointerException を返す

于 2012-01-13T13:56:42.543 に答える