我在这个问题上困扰了很长时间。我想在android studio中制作微调框并使用Firebase数据库。但是我似乎无法让微调器在微调器中显示数据库的任何数据。我尝试遵循一些类似的问题,但是我遇到了同样的问题。由于我是Firebase的新手,因此不确定如何实际创建要从中提取的索引。
这是我当前的代码:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference fDatabaseRoot = database.getReference("locations");
fDatabaseRoot.child("buildings").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final List<String> buildings = new ArrayList<>();
for (DataSnapshot buildingSnapshot: dataSnapshot.getChildren()) {
String buildingName = buildingSnapshot.child("buildingName").getValue(String.class);
buildings.add(buildingName);
}
Spinner buildingSpinner = findViewById(R.id.spinner);
ArrayAdapter<String> buildingAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_item, buildings);
buildingAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
buildingSpinner.setAdapter(buildingAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});`
这是我的数据库的设置方式:Firebase Spinner Database
答案 0 :(得分:1)
这是SnapshotListener
的FirebaseFirestore实现。
您可以通过DocumentChange类检查数据的更改类型(ADDED
,MODIFIED
,REMOVED
)。您可以在此处查看示例:https://firebase.google.com/docs/firestore/query-data/listen#view_changes_between_snapshots
FirebaseFirestore db= FirebaseFirestore.getInstance();
db.collection("locations").document("buildings").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot snapshots,
@Nullable FirebaseFirestoreException e){
//your action here
}
);
答案 1 :(得分:0)
好吧,因此使用实时数据库时,我不得不将“读取”和“写入”规则切换为true,完全忘记了。
请记住,孩子们总是做功课。 :)