W / ClassMapper:在类上找不到categoryName的setter / field

时间:2017-08-31 14:45:51

标签: android json firebase arraylist firebase-realtime-database

我尝试从Firebase数据库中检索数据并将其显示在视图中。当ArrayList中的数据被编码时,代码工作正常。但是当ArrayList中的数据填充了从Firebase数据库中检索到的数据时,它会显示空视图。这就是我在日志中获得的内容:

    W/ClassMapper: No setter/field for categoryName found on class
    W/ClassMapper: No setter/field for categoryImageUrl found on class
    and so on..

这是MainActivity.java(ECartHomeActivity.java):(用于获取数据)

            public class ECartHomeActivity extends AppCompatActivity {
public static final String DATABASE_PATH_UPLOADS = "ProductCategoryModel";

// firebase objects
DatabaseReference databaseMessages;
ArrayList<ProductCategoryModel> productCategoryList;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ecart);

        productCategoryList = new ArrayList<ProductCategoryModel>();
    databaseMessages = FirebaseDatabase.getInstance().getReference(DATABASE_PATH_UPLOADS);

    databaseMessages.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


           productCategoryList.clear();

            for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()){  // iterates through all the messages

                ProductCategoryModel message = messageSnapshot.getValue(ProductCategoryModel.class);
                ProductCategoryModel fire = new ProductCategoryModel();
                String categoryName = message.getProductCategoryName();
                String categoryDescription = message.getProductCategoryDescription();
                String categoryDiscount = message.getProductCategoryDiscount();
                String categoryImageUrl = message.getProductCategoryImageUrl();
                fire.setProductCategoryName(categoryName);
                fire.setProductCategoryDescription(categoryDescription);
                fire.setProductCategoryDiscount(categoryDiscount);
                fire.setProductCategoryImageUrl(categoryImageUrl);
                productCategoryList.add(fire);
            }




            CenterRepository.getCenterRepository().setListOfCategory(productCategoryList);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    }); }

如果&#34; productCategoryList&#34;它会在视图中显示数据。 ArrayList是硬编码的。 但是,如果此ArrayList填充了从Database中检索的数据,则不会显示任何数据。

ProductCategoryModel.java

    public class ProductCategoryModel {



public ProductCategoryModel(){

}


private String categoryName;
private String categoryDescription;
private String categoryDiscount;
private String categoryImageUrl;



/**
 * @param productCategoryName
 * @param productCategoryDescription
 * @param productCategoryDiscount
 * @param productCategoryUrl
 */
public ProductCategoryModel(String productCategoryName, String productCategoryDescription,
        String productCategoryDiscount, String productCategoryUrl) {
    super();
    this.categoryName = productCategoryName;
    this.categoryDescription = productCategoryDescription;
    this.categoryDiscount = productCategoryDiscount;
    this.categoryImageUrl = productCategoryUrl;
}







/**
 * @return the idproductcategory
 */
public String getProductCategoryName() {
    return categoryName;
}

/**
 * @param categoryName
 *            the idproductcategory to set
 */
public void setProductCategoryName(String categoryName) {
    this.categoryName = categoryName;
}





/**
 * @return the productDescription
 */
public String getProductCategoryDescription() {
    return categoryDescription;
}

/**
 * @param categoryDescription
 *            the productDescription to set
 */
public void setProductCategoryDescription(String categoryDescription) {
    this.categoryDescription = categoryDescription;
}




/**
 * @return the productDiscount
 */
public String getProductCategoryDiscount() {
    return categoryDiscount;
}

/**
 * @param categoryDiscount
 *            the productDiscount to set
 */
public void setProductCategoryDiscount(String categoryDiscount) {
    this.categoryDiscount = categoryDiscount;
}





/**
 * @return the productUrl
 */
public String getProductCategoryImageUrl() {
    return categoryImageUrl;
}

/**
 * @param categoryImageUrl
 *            the productUrl to set
 */
public void setProductCategoryImageUrl(String categoryImageUrl) {
    this.categoryImageUrl = categoryImageUrl;
}  }

这是JSON代码:

    {
    "ProductCategoryModel" : {
"1" : {
  "categoryName" : "anonymous",
  "categoryDescription" : "Heyyyy",
  "categoryDiscount" : "anonymous",
  "categoryImageUrl" : "anonymous"
},
"2" : {
 "categoryName" : "anonymous",
  "categoryDescription" : "Heyyyy",
  "categoryDiscount" : "anonymous",
  "categoryImageUrl" : "anonymous"
},
 "3" : {
  "categoryName" : "anonymous",
  "categoryDescription" : "Heyyyy",
  "categoryDiscount" : "anonymous",
  "categoryImageUrl" : "anonymous"
} } }

1 个答案:

答案 0 :(得分:1)

通过android studio的默认快捷方式(alt + insert或右键单击并生成)生成ProductCategoryModel类的getter和setter(以及构造函数),因为手动键入时某些字母可能存在错误,您可以替换

for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()){  // iterates through all the messages
            ProductCategoryModel message = messageSnapshot.getValue(ProductCategoryModel.class);
            ProductCategoryModel fire = new ProductCategoryModel();
            String categoryName = message.getProductCategoryName();
            String categoryDescription = message.getProductCategoryDescription();
            String categoryDiscount = message.getProductCategoryDiscount();
            String categoryImageUrl = message.getProductCategoryImageUrl();
            fire.setProductCategoryName(categoryName);
            fire.setProductCategoryDescription(categoryDescription);
            fire.setProductCategoryDiscount(categoryDiscount);
            fire.setProductCategoryImageUrl(categoryImageUrl);
            productCategoryList.add(fire);
        }

以某种聪明的方式:

for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()){  // iterates through all the messages

            String categoryName = message.getProductCategoryName();
            String categoryDescription = message.getProductCategoryDescription();
            String categoryDiscount = message.getProductCategoryDiscount();
            String categoryImageUrl = message.getProductCategoryImageUrl();
            ProductCategoryModel fire = new ProductCategoryModel(categoryName,categoryDescription,categoryDiscount,categoryImageUrl);
            productCategoryList.add(fire);
        }

您的模型类似乎存在问题,我希望这可以解决您的问题。