我从firebase数据库中检索到的文本没有出现在我的列表视图中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我从firebase数据库中检索到的文本没有出现在我的列表视图中相关的知识,希望对你有一定的参考价值。
这是我的数据库的屏幕截图:
这是活动:
private ListView dishList;
private Button bAddNewDish;
private DishListAdapter dishListAdapter;
private FirebaseDatabase mFireDb;
private DatabaseReference mDbReference;
private ChildEventListener mChildListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dishes);
dishList = (ListView) findViewById(R.id.dishList);
bAddNewDish = (Button) findViewById(R.id.bAddNewDish);
mFireDb = FirebaseDatabase.getInstance();
mDbReference = mFireDb.getReference().child("dishlist");
ArrayList<DishElement> dishArray = new ArrayList<>();
dishListAdapter = new DishListAdapter(this,R.layout.dish_item_element,dishArray);
dishList.setAdapter(dishListAdapter);
mChildListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
DishElement dishElement = dataSnapshot.getValue(DishElement.class);
dishListAdapter.add(dishElement);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
DishElement dishElement = dataSnapshot.getValue(DishElement.class);
dishListAdapter.add(dishElement);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
DishElement dishElement = dataSnapshot.getValue(DishElement.class);
dishListAdapter.add(dishElement);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mDbReference.addChildEventListener(mChildListener);
bAddNewDish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(view.getContext(),AddDish.class);
startActivity(i);
}
});
}
}
这是适配器:
public class DishListAdapter extends ArrayAdapter<DishElement> {
public DishListAdapter(@NonNull Context context, int resource, ArrayList<DishElement> dishElements) {
super(context, resource, dishElements);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
DishElement dishElement = getItem(position);
if(convertView == null){
convertView = LayoutInflater.from((Activity) getContext()).inflate(R.layout.dish_item_element,parent,false);
}
TextView dishName = (TextView) convertView.findViewById(R.id.dishName);
dishName.setText(dishElement.getName());
return convertView;
}
}
我用dishElement.getName()
方法得到null作为值。数据库连接似乎工作正常,但每当在我的数据库中添加子节点时,我都没有获得此字符串值。
答案
您在读取数据时遇到问题,因为您的字段未正确命名。要解决此问题,请使用如下所示的模型类:
public class DishElement {
private String description, image, menuId, name;
private double price;
public DishElement() {}
public DishElement(String description, String image, String menuId, String name, double price) {
this.description = description;
this.image = image;
this.menuId = menuId;
this.name = name;
this.price = price;
}
public String getDescription() {return description;}
public String getImage() {return image;}
public String getMenuId() {return menuId;}
public String getName() {return name;}
public double getPrice() {return price;}
}
要实际正确读取数据,请从数据库中删除旧数据并添加新数据。
要读取数据,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference dishListRef = rootRef.child("dishlist");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
DishElement dishElement = ds.getValue(DishElement.class);
dishListAdapter.add(dishElement);
Log.d("TAG", dishElement.getName());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
dishListRef.addListenerForSingleValueEvent(eventListener);
如您所见,我添加了一个日志语句来打印出名称:
dishElement.getName()
在这种情况下肯定会起作用。在你的情况下没有工作,因为Firebase正在寻找一个名为name
而不是Name
(大写N)的字段。
以上是关于我从firebase数据库中检索到的文本没有出现在我的列表视图中的主要内容,如果未能解决你的问题,请参考以下文章
从 firebase 检索数据并将其显示在可扩展的 recyclerview 中
每当我尝试在从 firebase 检索到的地图上显示位置时,都会出现错误 [重复]
Firebase - iOS Swift:使用从两个单独的子节点检索到的数据加载表格视图单元格
在 Firebase 中,检索到的数据不会从 .observeEventType 方法中取出