在我的应用程序中,我有一个片段,允许用户对要查看的国家/地区进行过滤搜索。 看起来像这样(用户选择要查看的国家/地区的大陆,然后出现这些大陆的所有国家/地区):
我使用Firebase Realtime database
来保存所有国家/地区的名称和每个国家/地区的图片。这是我的JSON树的样子(并非此处显示所有国家/地区):
(顺便说一句,很抱歉,因为它全部是葡萄牙语):
我目前可以显示特定大洲的所有国家/地区,但是如果用户选择多个大洲,则无法查询所有国家/地区... 这是我目前必须执行的代码:
DatabaseReference paisNomeContinentes = mDatabase.child("continentes").child(Constants.PAISES_EUROPA).child("Paises"); // C1 - ÁFRIA (Constants.PAISES_AFRICA)
ValueEventListener valueEventListener1 = new ValueEventListener() { // C2 - ÁSIA (Constants.PAISES_ASIA)
@Override // C3 - ANTÁRTIDA (Constants.PAISES_ANTARTIDA)
public void onDataChange(DataSnapshot dataSnapshot) { // C4 - AMÉRICA (Constants.PAISES_AMERICA)
List<String> nomePaisList = new ArrayList<>(); // C5 - EUROPA (Constants.PAISES_EUROPA)
// C6 - OCEANIA (Constants.PAISES_OCEANIA)
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String nomePais = ds.child("Nome").getValue(String.class);
nomePaisList.add(nomePais);
}
int urlCount = nomePaisList.size();
int randomNumber = new Random().nextInt(urlCount);
List<String> randomNomePaisList = new ArrayList<>();
for (int i=0; i<=9; i++) {
randomNomePaisList.add(nomePaisList.get(randomNumber));
txtHomeDesc.setText(randomNomePaisList.get(i)); // Inserir na TextView o nome do respetivo país
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
paisNomeContinentes.addListenerForSingleValueEvent(valueEventListener1);
如何检索用户选择的所有大洲国家/地区?
答案 0 :(得分:0)
可以有多种方法来实现这一目标。其中一项是在下面完成的-
String nomePais;
String nome;
List<String> nomePaisList;
DatabaseReference paisNomeContinentes = mDatabase.child("Continente").child(Constants.PAISES_EUROPA).child("Paises"); // C1 - ÁFRIA (Constants.PAISES_AFRICA)
ValueEventListener valueEventListener1 = new ValueEventListener() { // C2 - ÁSIA (Constants.PAISES_ASIA)
@Override // C3 - ANTÁRTIDA (Constants.PAISES_ANTARTIDA)
public void onDataChange(DataSnapshot dataSnapshot) { // C4 - AMÉRICA (Constants.PAISES_AMERICA)
// C5 - EUROPA (Constants.PAISES_EUROPA)
// C6 - OCEANIA (Constants.PAISES_OCEANIA)
for(DataSnapshot ds : dataSnapshot.getChildren()) {
nomePais = ds.child("Continente").getValue(String.class);
if(nomePais.equals("AMERICA") || nomePais.equals("EUROPIA") {
nome = nomePais;
fetch(nome);
} // Suppose user selects continent AMERICA & EUROPIA
}
void fetch(String n) {
Query paisNome = mDatabase.child("continentes").child(Constants.PAISES_EUROPA).child("Paises").child("P; 1").child("Nome").equalTo(n);
ValueEventListener valueEventListener1 = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
nomePaisList = new ArrayList<>();
nome = dataSnapshots.getValue().toString();
nomePaisList.add(nome);
}
}
我希望这对您有帮助....