android - ListView Displays all of the data from Firebase issue
问题描述
I have created a spinner that holds a list of sectors and when selecting one it should display the items that belong to that specific sector, I think there is an issue with my query that fetches data from firebase real time database, as it returns all of the items in a list
On create Code
FirebaseApp.initializeApp(this);
listView = findViewById(R.id.listView);
spnSector = findViewById(R.id.spnSector);
ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(this,
R.array.sector_array, android.R.layout.simple_spinner_item);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnSector.setAdapter(adapter1);
spnSector.setOnItemSelectedListener(this);
Location Class
public class Location {
public String sector;
public String area;
public double longitude;
public double latitude;
public String getSector() {
return sector;
}
public String getArea() {
return area;
}
public double getLongitude() {
return longitude;
}
public double getLatitude() {
return latitude;
}
public Location()
{
}
public Location(String sector , String area, double longitude, double latitude)
{
this. sector = sector;
this. area = area;
this.longitude = longitude;
this.latitude = latitude;
}
@Override
public String toString() {
return "\n Sector='" + sector + '\'' +
",Area Name='" + area + '\'' +
",Longitude='" + longitude + '\'' +
",Latitude=" + latitude + "\n";
}
Case class
public class Case {
private String caseName;
private String date;
private String caseStatus;
private Location location;
public String getDate() {
return date;
}
public String getCaseName() {
return caseName;
}
public String getCaseStatus() {
return caseStatus;
}
public Location getLocation() {
return location;
}
public Case() {
}
public Case(String caseName,String date, String caseStatus , Location location) {
this.caseName = caseName;
this.date = date;
this.caseStatus = caseStatus;
this.location = location;
}
@Override
public String toString() {
return "\nCase Date=" + date + "\n" +
"Area=" + location.area + "\n" +
"Latitude=" + location.latitude + "\n" +
"Longitude=" + location.longitude + "\n"+
"Sector=" + location.sector + "\n" +
"Status=" + caseStatus + "\n" +
"Case name=" + caseName + "\n" ;
}
}
Search query Method
public void doSearch3(View view) {
String sector = spnSector.getSelectedItem().toString();
final ArrayList<Case> cases = new ArrayList<>();
final ArrayAdapter adapter = new ArrayAdapter<> (SearchCase.this, android.R.layout.simple_list_item_1, cases);
databaseReference = FirebaseDatabase.getInstance().getReference();
Query query = databaseReference.child("/Cases");
query.orderByChild("/location/sector").equalTo(sector);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()){
Case case1 = ds.getValue(Case.class);
cases.add(case1);
}
listView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
I was able to do it with firestore, but I must do it in Realtime, i think the query is wrong
解决方案
查询构建方法,例如orderByChild
并equalTo
返回一个新Query
对象,因此您必须更新query
变量以引用该新对象。
Query query = databaseReference.child("/Cases");
query = query.orderByChild("/location/sector").equalTo(sector);
query.addValueEventListener(new ValueEventListener() {
推荐阅读
- delete-file - 使用 BIM360 API 问题删除文件
- python - 号码流检测
- unity3d - 在 Unity3d 中扭曲或收缩纹理的特定区域的着色器
- networking - PPP 和以太网接口不能同时工作
- json - Angular:json 到 formBuilder 到 json
- ios - 如何解决建筑的重复符号
- python - 将列表直接写入 gcs 文件
- postgresql - 不同模式之间的 Postgres 表同步
- javascript - 我收到“无法读取未定义的属性‘办公室’”下拉列表错误
- sql - 返回正确的内容搜索字典中的子字符串 - Postgresql