0

私のAndroidアプリでは、サーバーとの通信にksoap2を使用しています。石鹸のリクエストを介して特定の複雑なスポーツ情報構造をダウンロードし、プログラムの後半で解析します。

私がやりたいのは、この複雑な構造をどういうわけか「保存」して、後でその構造内のすべての情報が最終的で変更されなくなったときに再度解析できるようにして、Webサービスを再度呼び出さなくても表示できるようにすることです。

SoapObjectクラスのtoString()メソッドを使用して構造全体を文字列に変換し、アプリの共有設定に保存できるようになりました。

ただし、Webサーバーから直接データをダウンロードするときに使用するパーサーを使用して文字列を解析するには、SoapObjectとして必要です。私はこのようなことを試みました:

SoapObject soapObj = (SoapObject) dataAsStringFromSharedPrefs;

しかし、その方法で文字列をSoapObjectにキャストすることはできません。

4

3 に答える 3

2

これはここでうまくいくようです:

public SoapObject createSoapObjectFromSoapObjectString(String soapObjectString)
{
// Create a SoapSerializationEnvelope with some config
SoapSerializationEnvelope env = new SoapSerializationEnvelope(SoapEnvelope.VER11);
env.dotNet = true;

// Set your string as output
env.setOutputSoapObject(soapObjectString);

// Get response
SoapObject so = (SoapObject) env.getResponse();

return so;
}
于 2014-11-10T11:27:27.300 に答える
2

これがsoapXML文字列をSoapObjectに変換するためにうまく機能することを願っています

public SoapObject string2SoapObject(byte[] bytes)
{
    SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER12);
    SoapObject soap=null;
    try {
        ByteArrayInputStream inputStream=new ByteArrayInputStream(bytes);
        XmlPullParser p= Xml.newPullParser();
        p.setInput(inputStream, "UTF8");
        envelope.parse(p);
        soap=(SoapObject)envelope.bodyIn;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return soap;
}
于 2017-08-31T05:45:32.040 に答える
1

たとえば、someObjectは、CategoryId、Name、Descriptionのメンバーを持つオブジェクトです。これらのオブジェクトメンバーを応答で取得している場合は、次のようにしてそれらをsomeObjectに保存できます。

SoapObject response = (SoapObject)envelope.getResponse();

someObject.CategoryId =  Integer.parseInt(response.getProperty(0).toString());
someObject.Name =  response.getProperty(1).toString();
someObject.Description = response.getProperty(2).toString();

編集:

わかりました。問題が発生しました。

石鹸オブジェクトを取得するために、私が考えることができる唯一の方法は次のとおりです。

1)保存された文字列を解析します2)すべてのデータフィールドをローカル変数に保存します

Parse stored string:

start loop
int x = something
string y = something
double z = something
end loop

3)変数を使用して新しいオブジェクトを作成します

someObject.fieldx = x
someObject.fieldy = y
someObject.fieldz = z

4)新しいsoapobjectを作成します

SoapObject sp_Object = new SoapObject(NAMESPACE, METHOD_NAME);

5)手順3のオブジェクトを使用してpropertyinfoを作成します

PropertyInfo prop = new PropertyInfo();
prop.setNamespace(NAMESPACE);
prop.setType(someObject.getClass());
prop.setValue(someObject);

6)手順4でpropertyinfoをsoapobjectに追加します

sp_Object.addProperty(prop);

次に、パーサーにsoapobjectsp_Objectを使用できます。

于 2012-11-16T19:57:52.697 に答える