我正在尝试从 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/