Как я могу привести String к объекту SoapObject в ksoap2?

В моем приложении для Android я использую ksoap2 для связи с сервером. Я загружаю определенную сложную спортивную информационную структуру по запросу мыла и анализирую ее позже в своей программе.

То, что я хочу сделать, это как-тоспасти" эта сложная структура, так что я могу проанализировать ее позже, когда вся информация в этой структуре является окончательной и неЯ больше не могу изменить его, чтобы я мог отобразить его без повторного вызова веб-службы.

Я понял, что могу превратить всю структуру в строку с помощью метода toString () из класса SoapObject, чтобы сохранить его в приложении ».Общие настройки.

НО: чтобы проанализировать строку с помощью моего парсера, который я использую, когда загружаю данные непосредственно с веб-сервера, мне нужно это как SoapObject. Я попробовал что-то вроде этого:

SoapObject soapObj = (SoapObject) dataAsStringFromSharedPrefs;

Но я не могу привести строку к SoapObject таким образом.

 Naveed Ali08 нояб. 2014 г., 13:47
Вы решили свою проблему?
 kaolick10 нояб. 2014 г., 12:28
@NaveedAli Я только что нашел способ создать объект SoapObject из строки и опубликовал его в качестве ответа.
 kaolick10 нояб. 2014 г., 11:47
@NaveedAli Я нашел другой способ для моего варианта использования. Вместо разбора / создания строки для объекта мыла я анализирую результат в модели данных, сериализую его и сохраняю в общих настройках. Когда я загружаю его позже, я возвращаю его обратно в свою модель данных.

Ответы на вопрос(3)

что это будет хорошо работать для преобразования мыльной 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;
}

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 prop = new PropertyInfo();
prop.setNamespace(NAMESPACE);
prop.setType(someObject.getClass());
prop.setValue(someObject);

6) добавьте propertyinfo к мыльному объекту на шаге 4

sp_Object.addProperty(prop);

Затем вы можете использовать soapobject sp_Object для вашего парсера.

 Ravi Chimmalgi20 нояб. 2012 г., 20:01
я обновил ответ, посмотрим, поможет ли это
 Ravi Chimmalgi20 нояб. 2012 г., 00:56
Если вам нужен мыльный объект для вашего парсера, тогда зачем преобразовывать ответ в строку, используя tostring? ответ - мыльный объект. попробуйте разобрать это. SoapObject response = (SoapObject) envelope.getResponse ();
 kaolick20 нояб. 2012 г., 16:00
Если я'Не ошибаюсь, я не могу сохранить объект SoapObject в SharedPreferences для дальнейшего использования. Тот'Поэтому я преобразую его с помощью toString (), чтобы сохранить его в SharedPreferences.
 kaolick19 нояб. 2012 г., 15:44
Спасибо, но проблема в сохранении частей из ответа или даже полного ответа (например, в виде строки). Проблема заключается в воссоздании SoapObject из сохраненных частей. Как я могу достичь этого?
 kaolick25 янв. 2013 г., 10:08
Я не могпроверить ли тыОтвет правильный или нет, потому что я решил сохранить данные через SQLiteDatabase. Но в любом случае, спасибо за ваши усилия.
Решение Вопроса

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;
}
 bashahul17 февр. 2016 г., 09:39
У меня было такое же требование, я попробовал вышеуказанное решение. но это не сработало. Выдает исключение в строкеSoapObject so = (SoapObject) env.getResponse();, Я думаю, что некоторый код отсутствует.
 harikrishnan23 мар. 2017 г., 07:41
да башахул джи. приведенный выше код также не работает для меня. может kaolick помочь в этом .. сначала получаю зашифрованный строковый объект-мыло для расшифровки ответа, после дешифрования получаю ответ, он рассматривается как строковый формат xml response.need, чтобы снова преобразовать мыльный объект для обработки responseI '
 kaolick24 мар. 2017 г., 11:47
я больше не использую ksoap2, потому что я переключился на REST в моем приложении. Извини, я выигралздесь я не смогу помочь

Ваш ответ на вопрос