【问题标题】:Getting Null Values From Bean Class using JAVA in Android?在 Android 中使用 JAVA 从 Bean 类中获取空值?
【发布时间】:2014-01-17 07:55:58
【问题描述】:

这是我的 Bean 类:

public class MenuFields {
    private int id;
    private int menuId;
    private int fieldTypeId;
    private String c4wCode;
    private String fieldLabel;
    private String fieldValues;
    private Date dateCreated;
    private Date dateModified;
    private int isRequired;
    private int isStatic;
    private int fieldOrder;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getMenuId() {
        return menuId;
    }
    public void setMenuId(int menuId) {
        this.menuId = menuId;
    }
    public int getFieldTypeId() {
        return fieldTypeId;
    }
    public void setFieldTypeId(int fieldTypeId) {
        this.fieldTypeId = fieldTypeId;
    }
    public String getC4wCode() {
        return c4wCode;
    }
    public void setC4wCode(String c4wCode) {
        this.c4wCode = c4wCode;
    }
    public String getFieldLabel() {
        return fieldLabel;
    }
    public void setFieldLabel(String fieldLabel) {
        this.fieldLabel = fieldLabel;
    }
    public String getFieldValues() {
        return fieldValues;
    }
    public void setFieldValues(String fieldValues) {
        this.fieldValues = fieldValues;
    }
    public Date getDateCreated() {
        return dateCreated;
    }
    public void setDateCreated(Date dateCreated) {
        this.dateCreated = dateCreated;
    }
    public Date getDateModified() {
        return dateModified;
    }
    public void setDateModified(Date dateModified) {
        this.dateModified = dateModified;
    }
    public int getIsRequired() {
        return isRequired;
    }
    public void setIsRequired(int isRequired) {
        this.isRequired = isRequired;
    }
    public int getIsStatic() {
        return isStatic;
    }
    public void setIsStatic(int isStatic) {
        this.isStatic = isStatic;
    }
    public int getFieldOrder() {
        return fieldOrder;
    }
    public void setFieldOrder(int fieldOrder) {
        this.fieldOrder = fieldOrder;
    }
}

我已将我的 JSON 硬编码为字符串:

public class MainActivity extends Activity {
    String jsonObjectString ="[\n\n\n {\n \"id\": 22,\n \"menu_id\": 1,\n \"field_type_id\": 1,\n \"c4w_code\": \"1234\",\n \"field_label\": \"Customer No\",\n \"field_values\": \"\",\n \"date_Created\": \"2012-09-16 05:11:23\",\n \"date_modified\": \"2013-11-20 10:33:23\",\n \"is_required\": 0,\n \"is_static\": 1,\n \"field_order\": 1\n },\n {\n \"id\": 23,\n \"menu_id\": 1,\n \"field_type_id\": 1,\n \"c4w_code\": \"1234\",\n \"field_label\": \"Company Name\",\n \"field_values\": \"\",\n \"date_Created\": \"2012-09-16 05:11:56\",\n \"date_modified\": \"2013-11-20 10:33:23\",\n \"is_required\": 1,\n \"is_static\": 1,\n \"field_order\": 3\n }\n\n]";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    context = this;
  }

  private void getCustomerMenuFieldsData(String parameter){  
    try{  
      MenuFields[]  menuFieldHolder = gson.fromJson(jsonObjectString,MenuFields[].class);
      Log.i("menuField Instance ",""+menuFieldHolder[1].getId() +"::::" +         menuFieldHolder[1].getIsRequired() +":::" + menuFieldHolder[1].getIsStatic() +":::" +menuFieldHolder[1].getC4wCode() +":::" +menuFieldHolder[1].getFieldLabel());
    }  
    catch (Throwable t){
      t.printStackTrace();
    }   
}

这是 LogCat: 12-31 04:02:36.950: I/menuField Instance(2050): 23::::0:::0:::null:::null

我的代码有什么问题?为什么它只为我提供 int 值,而所有 String 值都是 Null? 我一次又一次地检查了代码,这浪费了我大约 7 个小时,但我仍然在 String 中得到空值。

【问题讨论】:

标签: java android json gson


【解决方案1】:

您需要将 bean 成员映射到 json 键。

你可以使用:

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

或者:

@SerializedName("c4w_code")
private String c4wCode;

对于您的错误,您需要给出日期格式:

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
    .setDateFormat("yyyy-MM-dd HH:mm:ss")
    .create();

【讨论】:

  • 添加代码后我收到错误:12-31 04:32:35.355: W/System.err(9637): com.google.gson.JsonSyntaxException: 2012-09-16 05: 11:23 12-31 04:32:35.360: W/System.err(9637): 在 com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:81) 12-31 04:32:35.360 : W/System.err(9637): 在 com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66) 12-31 04:32:35.360: W/System.err(9637): 在com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多