2015-06-16 3 views
2

У меня есть ответ json, и я хочу разобрать его с помощью библиотеки LoganSquare.JSON Parsing With LoganSquare

Это пример массива JSON:

{ 
    "version": 1, 
    "looks": 
    [ 
    { 
     "uuid": 10001, 
     "img_url": "myUrl", 
     "stylist": "myName", 
     "address": "myAddress", 
     "phone": "myPhone", 
     "timetable": "myTimeTable", 
     "latitude": "myLatitude", 
     "longitude": "myLongitude" 
    }, 
    { 
     "uuid": 10002, 
     "img_url": "myUrl2", 
     "stylist": "myName2", 
     "address": "myAddress2", 
     "phone": "myPhone2", 
     "timetable": "myTimeTable2", 
     "latitude": "myLatitude2", 
     "longitude": "myLongitude2" 
    } 
    ] 
} 

И это структура, которая я использовать для синтаксического анализа ответа JSON:

@JsonObject 
public class Image 
{ 
    @JsonField(name = "_id") 
    public int uuid; 
    @JsonField 
    public String img_url; 
    @JsonField 
    public String stylist; 
    @JsonField 
    public String address; 
    @JsonField 
    public String phone; 
    @JsonField 
    public String timetable; 
    @JsonField 
    public String latitude; 
    @JsonField 
    public String longitude; 

    @JsonField 
    private int privateInt; 

    public int getPrivateInt() { 
     return privateInt; 
    } 

    public void setPrivateInt(int i) { 
     privateInt = i; 
    } 

    @OnJsonParseComplete 
    void onParseComplete() { 
     // Do some fancy post-processing stuff after parsing here 
    } 

    @OnPreJsonSerialize 
    void onPreSerialize() { 
     // Do some fancy pre-processing stuff before serializing here 
    } 
} 

В конце, я запросить данные:

AsyncHttpClient client = new AsyncHttpClient(); 

    client.get("http://www.privateurl.com/", new AsyncHttpResponseHandler() { 

     @Override 
     public void onStart() { 
      // called before request is started 
     } 

     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] response) { 
      // called when response HTTP status is "200 OK" 

      String strResponse = new String(response); 

      try { 
       images = LoganSquare.parseList(strResponse, Image.class); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      Toast toast = Toast.makeText(getApplicationContext(), String.valueOf(images.get(0).uuid), Toast.LENGTH_LONG); 
      toast.show(); 
     } 

     @Override 
     public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { 
      // called when response HTTP status is "4XX" (eg. 401, 403, 404) 
     } 

     @Override 
     public void onRetry(int retryNo) { 
      // called when request is retried 
     } 
    }); 
} 

Заявление parseList не возвращает ничего ... Как я могу его решить?

ответ

2

Класс, который вы проходите, не соответствует JSON, который вы принимаете.

У вас есть:

{ "version" : "", looks: [{},{},...]} 

Но ваш объект хорош только для массива выглядит. Ваш класс должен иметь свойство версии JsonField и список вашего класса Image, а затем он будет разбираться.

Надеюсь, это поможет.