0

在我的 Android 应用程序中,我使用 ksoap2 与服务器通信。我通过soap请求下载了一个复杂的体育信息结构,稍后在我的程序中解析它。

我想要做的是以某种方式“保存”这个复杂的结构,以便稍后当该结构中的所有信息都是最终的并且不再更改时我可以再次解析它,这样我就可以在不再次调用 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

希望这可以很好地将肥皂 XML 字符串转换为 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 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);

然后您可以将soapobject sp_Object 用于您的解析器。

于 2012-11-16T19:57:52.697 回答