Как проанализировать этот ответ веб-сервиса в Android?

Мы используем StringTemplateLoader для загрузки нашего tempates, который мы получили от дб (как предложенный Dan Vinton)

, Вот пример:

StringTemplateLoader stringLoader = new StringTemplateLoader();
String firstTemplate = "firstTemplate";
stringLoader.putTemplate(firstTemplate, freemarkerTemplate);
// It's possible to add more than one template (they might include each other)
// String secondTemplate = "<#include \"greetTemplate\"><@greet/> World!";
// stringLoader.putTemplate("greetTemplate", secondTemplate);
Configuration cfg = new Configuration();
cfg.setTemplateLoader(stringLoader);
Template template = cfg.getTemplate(firstTemplate);

Редактирование Вы не должны загружать все шаблоны при запуске. Каждый раз, когда мы получим доступ к шаблону, мы выберем его от DB и загрузим его через StringLoader, и путем вызова template.process () мы генерируем (в нашем случае) вывод XML.

5
задан Rajapandian 13 August 2009 в 05:47
поделиться

2 ответа

На самом деле это известное формат, если вы знаете, что Java Script. Эти данные в этом формате наводятся json Object и json Array . Я надеюсь, что вы используете библиотеку KSOAP2 .so Вот как вы можете проанализировать этот результат.

Например:

private Bundle bundleResult=new Bundle();
private JSONObject JSONObj;
private JSONArray JSONArr;
Private SoapObject resultSOAP = (SoapObject) envelope.getResponse();
/* gets our result in JSON String */
private String ResultObject = resultSOAP.getProperty(0).toString();

if (ResultObject.startsWith("{")) { // if JSON string is an object
    JSONObj = new JSONObject(ResultObject);
    Iterator<String> itr = JSONObj.keys();
    while (itr.hasNext()) {
        String Key = (String) itr.next();
        String Value = JSONObj.getString(Key);
        bundleResult.putString(Key, Value);
        // System.out.println(bundleResult.getString(Key));
    }
} else if (ResultObject.startsWith("[")) { // if JSON string is an array
    JSONArr = new JSONArray(ResultObject);
    System.out.println("length" + JSONArr.length());
    for (int i = 0; i < JSONArr.length(); i++) {
        JSONObj = (JSONObject) JSONArr.get(i);
        bundleResult.putString(String.valueOf(i), JSONObj.toString());
        // System.out.println(bundleResult.getString(i));
    } 
}

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

7
ответ дан 18 December 2019 в 11:59
поделиться

Я не распознаю формат. Я думаю, вам придется разобрать ответ самостоятельно,

Серия регулярных выражений кажется самым быстрым началом.

например:

String intput = ""; //your big response string
List<Map<String,String>> rows = new ArrayList<Map<String,String>>();
String[] rowdata = input.matches("DataRowValue\=\r\s*anyType{[^}]*};");


for (String r : rowdata){
   Map<String, String> row = new HashMap<String, String>();
   String[] nvpairs = r.split(";");

   for (string pair : nvpairs) {
      String[] s = pair.split("=");
      row.push(s[0], s[1]);
   }

}

должны помочь вам. Возможно, вам потребуется скорректировать первое регулярное выражение по множеству причин. что-то вроде "(? <= DataRowValue = [^ {] ) [^}] " может быть более подходящим. У меня возникнет соблазн получить доступ ко всему, что появляется только один раз, вылавливая это напрямую с помощью чего-то вроде

String username = input.match ("(? <= UserName \ =) [^;] *")

0
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: