在 Firebase 中制作 ListView Android
ListView making in Firebase Android
我有一个 Firebase 数据库,其中包含很少的客户值,如下所示。 (我在括号中提到了 child)
-Sooraj (child(registered user))
-January(child(month))
-Aswathy(child(name))
-address: ""
-cost: ""
-details: ""
-email: ""
-name: "Aswatyy" - (child ("name"))-
-phone: "944346848494"
-received: ""
-status: "Proposal Sent"
我需要从数据库中取出 child ("name") 并将其放入 ListView
.
我的 declaration
作为
ListView customerList;
List<String> customerArray = new ArrayList<>();
ArrayAdapter<String> adapter;
然后
customerList=findViewById(R.id.customerlistView);
ListView 填充代码为
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(month);
DatabaseReference NameRef = ref.child("name");
NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
String nameDatabase = postSnapshot.getValue(String.class);
customerArray.add(nameDatabase);
adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
customerList.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("name","load:onCancelled",databaseError.toException());
}
});
什么都没发生。这段代码哪里出错了?
如果您需要姓名列表,请尝试以下操作:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(registeredUser);
DatabaseReference nameRef = ref.child(month);
NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
String name=postSnapshot.getKey();
customerArray.add(name);
adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
customerList.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("name","load:onCancelled",databaseError.toException());
}
});
假设你有这个数据库:
Sooraj
January
Aswathy
address:...
name:...
getKey()
将检索数据库中的名称
final ArrayList<String> names= new ArrayList<>();
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference("User").child(userName).child(monthName);
final ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
HashMap nameModel = (HashMap) dataSnapshot.getValue();
String name =(String) nameModel.get("name");
names.add(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
databaseReference.addValueEventListener(valueEventListener);
从上面的方法你可以得到名称数组,你可以将它设置到你的适配器
你的table会是这样的
User
-registeredUserName
-monthName
-childName
name
如果您没有用户作为 table 名称
-registeredUserName
-monthName
-childName
name
然后通过
DatabaseReference databaseReference = firebaseDatabase.getReference().child(userName).child(monthName);
为了显示所有这些名称,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference monthRef = rootRef.child(registeredUser).child(month);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
list.add(name);
}
ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
monthRef.addListenerForSingleValueEvent(eventListener);
其中 registeredUser
在你的例子中是 Sooraj
而 month
是 January
.
输出将是:
Aswatyy
//All the other names
在您的代码中,有两个主要问题。第一个是您的参考,它在 ref
中缺少一个 child 并且在 NameRef
中指向 属性 这是无用的。第二个问题是您正在 for 循环内创建和设置适配器,最终将显示单个项目(最后一个项目)。
我有一个 Firebase 数据库,其中包含很少的客户值,如下所示。 (我在括号中提到了 child)
-Sooraj (child(registered user))
-January(child(month))
-Aswathy(child(name))
-address: ""
-cost: ""
-details: ""
-email: ""
-name: "Aswatyy" - (child ("name"))-
-phone: "944346848494"
-received: ""
-status: "Proposal Sent"
我需要从数据库中取出 child ("name") 并将其放入 ListView
.
我的 declaration
作为
ListView customerList;
List<String> customerArray = new ArrayList<>();
ArrayAdapter<String> adapter;
然后
customerList=findViewById(R.id.customerlistView);
ListView 填充代码为
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(month);
DatabaseReference NameRef = ref.child("name");
NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
String nameDatabase = postSnapshot.getValue(String.class);
customerArray.add(nameDatabase);
adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
customerList.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("name","load:onCancelled",databaseError.toException());
}
});
什么都没发生。这段代码哪里出错了?
如果您需要姓名列表,请尝试以下操作:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(registeredUser);
DatabaseReference nameRef = ref.child(month);
NameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
String name=postSnapshot.getKey();
customerArray.add(name);
adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
customerList.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("name","load:onCancelled",databaseError.toException());
}
});
假设你有这个数据库:
Sooraj
January
Aswathy
address:...
name:...
getKey()
将检索数据库中的名称
final ArrayList<String> names= new ArrayList<>();
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference("User").child(userName).child(monthName);
final ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
HashMap nameModel = (HashMap) dataSnapshot.getValue();
String name =(String) nameModel.get("name");
names.add(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
databaseReference.addValueEventListener(valueEventListener);
从上面的方法你可以得到名称数组,你可以将它设置到你的适配器
你的table会是这样的
User
-registeredUserName
-monthName
-childName
name
如果您没有用户作为 table 名称
-registeredUserName
-monthName
-childName
name
然后通过
DatabaseReference databaseReference = firebaseDatabase.getReference().child(userName).child(monthName);
为了显示所有这些名称,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference monthRef = rootRef.child(registeredUser).child(month);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String name = ds.child("name").getValue(String.class);
list.add(name);
}
ListView listView = (ListView) findViewById(R.id.list_view);
ArrayAdapter arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
monthRef.addListenerForSingleValueEvent(eventListener);
其中 registeredUser
在你的例子中是 Sooraj
而 month
是 January
.
输出将是:
Aswatyy
//All the other names
在您的代码中,有两个主要问题。第一个是您的参考,它在 ref
中缺少一个 child 并且在 NameRef
中指向 属性 这是无用的。第二个问题是您正在 for 循环内创建和设置适配器,最终将显示单个项目(最后一个项目)。