如何将一个String转换为ksoap2中的SoapObject?

时间:2012-11-15 16:19:10

标签: android string soap casting ksoap2

在我的Android应用程序中,我使用kso​​ap2与服务器进行通信。我通过soap请求下载某个复杂的体育信息结构,并在我的程序中稍后解析。

我想要做的是以某种方式“保存”这个复杂的结构,以便稍后当该结构中的所有信息都是最终的并且不再更改时我可以再次解析它,以便我可以在不调用Web服务的情况下显示它试。

我到目前为止,我可以使用SoapObject类中的toString()方法将整个结构转换为字符串,以便我可以将其保存在应用程序的共享首选项中。

但是:要使用我直接从Web服务器下载数据时使用的解析器来解析字符串,我需要它作为SoapObject。我试过这样的事情:

SoapObject soapObj = (SoapObject) dataAsStringFromSharedPrefs;

但是我无法以这种方式将字符串转换为SoapObject。

3 个答案:

答案 0 :(得分: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();

编辑:

好的我现在看到了问题。

要获得一个soapobject,我能想到的只有:

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);

然后,您可以使用soapobject sp_Object作为解析器。

答案 1 :(得分:1)

这似乎有效:

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;
}

答案 2 :(得分:1)

希望这适用于将soap 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;
}