2015-06-18 4 views
1

У меня есть эта строка json для разбора {"uid":8,"totalPoints":"7740"} Я написал ниже класс для этого.Разбор строки Json с использованием ObjectMapper?

public class Points extends WebRequest implements IWebRequest { 

    private static final String CLASS_TAG = Points.class.getSimpleName(); 
    private WebAPIResponse mWebAPIResponse; 
    private int mUserId; 

    /** 
    * Initialize object 
    * @param urlEndPoint 
    * @param uiDelegate 
    * @param appContext 
    * @param webServiceRequestCallback 
    */ 
    public Points(String urlEndPoint, IUIDelegate uiDelegate, 
      WeakReference<Context> appContext, 
      IWebServiceRequestCallback webServiceRequestCallback) { 
     super(urlEndPoint, uiDelegate, appContext, webServiceRequestCallback); 
    } 

    @Override 
    public String parseResponse(String responseString) { 

     if (MBUtil.isEmpty(responseString)) { 
      return ""; 
     } 

     String errMsg = ""; 

     try { 

      ObjectMapper objectMapper = new ObjectMapper(); 
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
      objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); 

      if (!objectMapper.canDeserialize(objectMapper.constructType(WebAPIResponse.class))) { 
       return getAppContext().getString(R.string.msg_error_in_reading_format); 
      } 

      WebAPIResponse webAPIResponse = objectMapper.readValue(responseString, WebAPIResponse.class); 
      this.mWebAPIResponse = webAPIResponse; 

      Errors errors = webAPIResponse.getErrors(); 

      if (errors != null) { 
       errMsg = errors.getMsg(); 
      } 

     } catch (Exception e) { 
      Log.e(CLASS_TAG, e.getMessage()); 
      errMsg = e.getMessage(); 
     } 
     return errMsg; 
    } 

    @Override 
    public JSONObject buildRequestBody() { 

     JSONObject jsonObject = new JSONObject(); 
     Context context = getAppContext(); 
     if(context == null) { 
      return jsonObject; 
     } 

     try { 

      // Authentication body parameters 
      JSONObject authenticationJsonObject = new JSONObject(); 
      authenticationJsonObject.put(context.getString(R.string.key_points_uid), mUserId); 
      return authenticationJsonObject; 

     } catch (Exception e) { 
      Log.e(CLASS_TAG, e.getMessage()); 
     } 
     return jsonObject; 
    } 

    public int getUserId() { 
     return mUserId; 
    } 

    public void setUserId(int mUserId) { 
     this.mUserId = mUserId; 
    } 

    public WebAPIResponse getWebAPIResponse() { 
     return mWebAPIResponse; 
    } 

    public void setWebAPIResponse(WebAPIResponse mWebAPIResponse) { 
     this.mWebAPIResponse = mWebAPIResponse; 
    } 

    public static class WebAPIResponse { 

     private Data pointsData; 
     private Errors errors; 

     public Data getPointsData() { 
      return pointsData; 
     } 

     public void setPointsData(Data pointsData) { 
      this.pointsData = pointsData; 
     } 

     public Errors getErrors() { 
      return errors; 
     } 

     public void setErrors(Errors errors) { 
      this.errors = errors; 
     } 
    } 

    public static class Data { 

     @JsonProperty("uid") 
     private int uid; 
     @JsonProperty("totalPoints") 
     private int totalPoints; 

     public int getUid() { 
      return uid; 
     } 

     public void setUid(int uid) { 
      this.uid = uid; 
     } 

     public int getTotalPoints() { 
      return totalPoints; 
     } 

     public void setTotalPoints(int totalPoints) { 
      this.totalPoints = totalPoints; 
     } 
    } 
} 

Я получаю должного отклика в parseResponse() метод, который,

responseString = {"uid":8,"totalPoints":"7740"} 

Но метод в том же pasreResponse(), когда он достиг этой линии

if (!objectMapper.canDeserialize(objectMapper.constructType(WebAPIResponse.class))) { 
       return getAppContext().getString(R.string.msg_error_in_reading_format); 
      } 

      WebAPIResponse webAPIResponse = objectMapper.readValue(responseString, WebAPIResponse.class); 

не отвечает какой-либо и не может разобрать строку. Пожалуйста, кто-нибудь проверит, правильный ли мой парсинг или нет, и почему он не разбирается.

+0

Что делает 'Errors' класс выглядеть? Убедитесь, что он сериализуется таким образом, который может распознать ObjectMapper. Другие два класса, включенные выше, выглядят нормально – blgt

ответ

2

С вашим responseString = {"uid":8,"totalPoints":"7740"} вы просто можете десериализировать его Data объект только.

Data data = objectMapper.readValue(responseString, Data.class); 

Если вы хотите десериализации вашего JSON строки в WebAPIResponse объекта, ваш responseString должен быть:

{"pointsData":{"uid":8,"totalPoints":"7740"}, "errors": ...} 
+0

Я сделал это, но все же это та же проблема. Даже я отлаживаю его в той же строке, что открывает DexFile.class на новой вкладке, в которой отображается сообщение «Редактор файлов классов» не найден. Что делать для этого? – Vid

Смежные вопросы