2017-03-02 70 views
-2

我正面临使用Android中的类文件解析json响应的问题。我遇到了“转换期间的问题”这样的错误。任何人都可以告诉我代码中的错误是什么?我在这里给我的嵌套类和响应。使用改进的json解析问题-Android

public class SendCouponCode { 
int statusCode; 
boolean status; 
String message; 
boolean furtherActionNeeded; 
ArrayList<Extras> extra; 

public void setExtra(ArrayList<Extras> extra) { 
    this.extra = extra; 
} 

public class Extras{ 
    String nextAction; 
    String nextActionTitle; 
    ArrayList<Item> items; 

    public ArrayList<Item> getItems() { 
     return items; 
    } 

    public void setItems(ArrayList<Item> items) { 
     this.items = items; 
    } 

    public String getNextAction() { 
     return nextAction; 
    } 

    public void setNextAction(String nextAction) { 
     this.nextAction = nextAction; 
    } 

    public String getNextActionTitle() { 
     return nextActionTitle; 
    } 

    public void setNextActionTitle(String nextActionTitle) { 
     this.nextActionTitle = nextActionTitle; 
    } 

    public class Item{ 
     int id; 
     String value; 
     boolean isExclusive; 

     public int getId() { 
      return id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     public String getValue() { 
      return value; 
     } 

     public void setValue(String value) { 
      this.value = value; 
     } 

     public boolean isExclusive() { 
      return isExclusive; 
     } 

     public void setExclusive(boolean exclusive) { 
      isExclusive = exclusive; 
     } 
    } 
} 
public int getStatusCode() { 
    return statusCode; 
} 

public void setStatusCode(int statusCode) { 
    this.statusCode = statusCode; 
} 

public boolean isStatus() { 
    return status; 
} 

public void setStatus(boolean status) { 
    this.status = status; 
} 

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 

public boolean isFurtherActionNeeded() { 
    return furtherActionNeeded; 
} 

public void setFurtherActionNeeded(boolean furtherActionNeeded) { 
    this.furtherActionNeeded = furtherActionNeeded; 
}} 

而且,对此我解析响应是

{ 
    "further_action_needed": true, 
    "status": true, 
    "message": "Coupon code is being processed, further action is needed for completion.", 
    "status_code": 901, 
    "extra": { 
    "items": [ 
    { 
    "is_exclusive": false, 
    "id": 7, 
    "name": "XXX" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 8, 
    "name": "XXX" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 9, 
    "name": "XX" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 21, 
    "name": "XX" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 26, 
    "name": "Default Batch" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 57, 
    "name": "XX" 
    }, 
    { 
    "is_exclusive": false, 
    "id": 63, 
    "name": "XX" 
    } 
], 
"next_action_title": "Select Your Batches", 
"next_action": "ADD_BATCHES" }} 

我GSON生成器类使用这个领域

Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create(); 

我的错误日志

me.entri.entrime.beans.EntriError: Something went wrong internally.  Please consider reporting the issue to us. 
    03-02 16:43:41.431 28965-28965/me.entri.entrime W/System.err:  at  retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:383) 
    03-02 16:43:41.431 28965-28965/me.entri.entrime W/System.err:  at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) 
03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at java.lang.reflect.Proxy.invoke(Proxy.java:813) 
03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at $Proxy2.sendCoupon(Unknown Source) 
03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at me.entri.entrime.api.GeneralApiService.sendCouponCode(GeneralApiService.java:786) 
03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at me.entri.entrime.api.GeneralApiService.onHandleIntent(GeneralApiService.java:339) 
    03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68) 
    03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at android.os.Looper.loop(Looper.java:154) 
    03-02 16:43:41.432 28965-28965/me.entri.entrime W/System.err:  at android.os.HandlerThread.run(HandlerThread.java:61) 
+0

改装不能实例化没有SendCouponCode实例的Extras和Item的实例。我会尽量让所有嵌套的类静态。请让我知道这可不可以帮你。 –

+0

内部类不能有静态块 –

+0

如果A类包含内部静态类B,那么B可以有静态内部类C. –

回答

0

使用在模型下面解析

public class SendCouponCode { 

@SerializedName("further_action_needed") 
@Expose 
private Boolean furtherActionNeeded; 
@SerializedName("status") 
@Expose 
private Boolean status; 
@SerializedName("message") 
@Expose 
private String message; 
@SerializedName("status_code") 
@Expose 
private Integer statusCode; 
@SerializedName("extra") 
@Expose 
private Extra extra; 

public Boolean getFurtherActionNeeded() { 
return furtherActionNeeded; 
} 

public void setFurtherActionNeeded(Boolean furtherActionNeeded) { 
this.furtherActionNeeded = furtherActionNeeded; 
} 

public Boolean getStatus() { 
return status; 
} 

public void setStatus(Boolean status) { 
this.status = status; 
} 

public String getMessage() { 
return message; 
} 

public void setMessage(String message) { 
this.message = message; 
} 

public Integer getStatusCode() { 
return statusCode; 
} 

public void setStatusCode(Integer statusCode) { 
this.statusCode = statusCode; 
} 

public Extra getExtra() { 
return extra; 
} 

public void setExtra(Extra extra) { 
this.extra = extra; 
} 

} 
+0

我在我的API管理器配置中使用字段命名策略。所以这些注释不是必需的 –

0

使用3类这样

SendCouponCode.class

public class SendCouponCode { 


private Boolean furtherActionNeeded; 

private Boolean status; 

private String message; 

private Integer statusCode; 

private Extra extra; 

public Boolean getFurtherActionNeeded() { 
return furtherActionNeeded; 
} 

public void setFurtherActionNeeded(Boolean furtherActionNeeded) { 
this.furtherActionNeeded = furtherActionNeeded; 
} 

public Boolean getStatus() { 
return status; 
} 

public void setStatus(Boolean status) { 
this.status = status; 
} 

public String getMessage() { 
return message; 
} 

public void setMessage(String message) { 
this.message = message; 
} 

public Integer getStatusCode() { 
return statusCode; 
} 

public void setStatusCode(Integer statusCode) { 
this.statusCode = statusCode; 
} 

public Extra getExtra() { 
return extra; 
} 

public void setExtra(Extra extra) { 
this.extra = extra; 
} 

} 

Extra.class

public class Extra { 


private List<Item> items = null; 

private String nextActionTitle; 

private String nextAction; 

public List<Item> getItems() { 
return items; 
} 

public void setItems(List<Item> items) { 
this.items = items; 
} 

public String getNextActionTitle() { 
return nextActionTitle; 
} 

public void setNextActionTitle(String nextActionTitle) { 
this.nextActionTitle = nextActionTitle; 
} 

public String getNextAction() { 
return nextAction; 
} 

public void setNextAction(String nextAction) { 
this.nextAction = nextAction; 
} 

} 

Item.class

public class Item { 


private Boolean isExclusive; 

private Integer id; 

private String name; 

public Boolean getIsExclusive() { 
return isExclusive; 
} 

public void setIsExclusive(Boolean isExclusive) { 
this.isExclusive = isExclusive; 
} 

public Integer getId() { 
return id; 
} 

public void setId(Integer id) { 
this.id = id; 
} 

public String getName() { 
return name; 
} 

public void setName(String name) { 
this.name = name; 
} 

} 

你可以做到this

+0

我正在使用fieldnaming策略。那么为什么我应该再次使用序列化记录? –

+0

你可以删除它,并尝试添加单独的类 –

+0

@Arjun我编辑了我的代码。 –