android - 带类映射器 : No setter/field for "class" found on class in android

标签 android listview firebase firebase-realtime-database

我正在尝试从 firebase 数据库中检索数据并将它们显示在我的 ListView 中。我的应用程序在低于 7.0 的 android 版本上运行良好,而在 7.0 版本中, ListView 中没有显示任何内容。这是我在日志中得到的:

W/ClassMapper: No setter/field for ExpenseTag found on class com.example.siddhi.ExpenseManager.Data.Expense

这里是BarActivity.class:

BarAdapter m_adapter = new BarAdapter(ListBarActivity.this, R.layout.bar_layout, tagsArrayList);

            // display the list.
            listView.setAdapter(m_adapter);

这里是Expense.class

package com.example.siddhi.ExpenseManager.Data;


public class Expense {
          public String expenseId;
          public String expenseName;


    public Expense() {
         /*Blank default constructor essential for Firebase*/
    }

    public Expense( String expenseId, String expenseName, ) {

                           this.expenseName = expenseName;
                                this.expenseId = expenseId;

               }


    //Getters and setters
    public void setExpenseName(String expenseName) {
        this.expenseName = expenseName;
    }


    public void setExpenseId(String expenseId) {
        this.expenseId = expenseId;
    }

       public String getExpenseName() {
        return expenseName;
    }


    public String getExpenseId() {
        return expenseId;
    }


    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
       result.put("expenseName", expenseName);
       result.put("expenseId", expenseId);
        return result;
    }
}

这里是其他EXpenseTag.Class:

 package com.example.siddhi.ExpenseManager.Data;



public class ExpenseTag {

    public String tagId;
    public String tagName;


    public ExpenseTag() {

         /*Blank default constructor essential for FireBase*/
    }


    public ExpenseTag( String tagId, String tagName) {
        this.tagId = tagId;
        this.tagName = tagName;

    }
    //Getters and setters
    public void setTagId(String tagId) {
        this.tagId = tagId;
    }

    public void setTagName(String tagName) {
        this.tagName = tagName;
    }
    public String getTagId() {
        return tagId;
    }
    public String getTagName() {
        return tagName;
    }

    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("tagId", tagId);
        result.put("tagName", tagName);
        return result;
    }
}

用于获取数据:

  final Query BarQuery = databaseReference11.child("Users").child("Expense");


    BarQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot tagsSnapshot : dataSnapshot.getChildren()) {
                Expense expense = tagsSnapshot.getValue(Expense.class);
                tagsArrayList.add(expense);

            }
        }//}

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("deeep", "onCancelled", databaseError.toException());
        }
    });

Json数据:

 "ExpenseList" : {
        "-Ke8TQJeVar6nMlzEkbI" : {
          "Expense" : {
            "-KftUp3S5TvZuSbB30CW" : {
              "ExpenseTag" : {
                "-KftUp3Eyjf3cZZncvvT" : {
                  "tagId" : "-KftUp3Eyjf3cZZncvvT",
                  "tagName" : "tag"
                }
              },
             "expenseId" : "-KftUp3S5TvZuSbB30CW",
             "expenseName" : "bb",
                             }
          },
          "expenseListName" : "Dfg",

        }

最佳答案

问题是您已经创建了一个 ExpenseTag 模型,但没有将它作为一个字段添加到 Expense 模型中。 我已经为您更新了费用模型。

 public class Expense {

    public ExpenseTag expenseTag;
    public String expenseId;
    public String expenseName;

    public Expense() {
         /*Blank default constructor essential for Firebase*/
    }

    public Expense(ExpenseTag expenseTag , String expenseId, String expenseName) {

        this.expenseTag = expenseTag;
        this.expenseName = expenseName;
        this.expenseId = expenseId;

    }

    public ExpenseTag getExpenseTag() {
        return expenseTag;
    }

    public void setExpenseTag(ExpenseTag expenseTag) {
        this.expenseTag = expenseTag;
    }

    //Getters and setters
    public void setExpenseName(String expenseName) {
        this.expenseName = expenseName;
    }


    public void setExpenseId(String expenseId) {
        this.expenseId = expenseId;
    }

    public String getExpenseName() {
        return expenseName;
    }


    public String getExpenseId() {
        return expenseId;
    }


    @Exclude
    public Map<String, Object> toMap() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("expenseName", expenseName);
        result.put("expenseId", expenseId);
        return result;
    }
}

关于android - 带类映射器 : No setter/field for "class" found on class in android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947424/

相关文章:

android - 为什么我的 ListView 在向 Firebase 添加新数据后不刷新?

android - "with"函数的使用

c# - Xamarin - TabbedPage 导航错误(页面不能有 parent )

java - 如何以编程方式打开在后台运行的应用程序

android - Android 的 WebView.settings.domStorageEnabled 的 flutter 替代品是什么?

android - 新的 Google Play 应用程序和 Firebase 云消息传递

java - getValue 数据库条目 onitemClick

Android 10 仍可使用 ANDROID_ID

android - 为什么我不能在 ListView 之后放置 Adview?

android - 如何在不同的线程中生成列表并填充到 ListView 中?