tin*_*tin 4 java android arraylist google-maps-markers firebase-realtime-database
我从Firebase
获取假定的数据之后获取数据,我将其存储在一个ArrayList
.所以这是示例代码.
markerArray = new ArrayList<>();
Firebase ref = new Firebase(Config.FIREBASE_URL_DRIVER);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getChildrenCount() == 0) {
markerInfo();
} else {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
name = snapshot.child("driversName").getValue().toString().trim();
busNum = snapshot.child("busNum").getValue().toString().trim();
latitude = Double.valueOf(snapshot.child("latitude").getValue().toString().trim());
longitude = Double.valueOf(snapshot.child("longitude").getValue().toString().trim());
availableSeat = snapshot.child("availableSeat").getValue().toString().trim();
estimatedTime = snapshot.child("estimatedTime").getValue().toString().trim();
if ((!latitude.equals(null) || latitude.equals(0)) && (!longitude.equals(null) || longitude.equals(0)) && availableSeat.equals("") && (!estimatedTime.equals("") || estimatedTime.equals("0"))) {
convertLatLong();
getTotalPass();
Toast.makeText(MainMapActivity.this, currentLocation+" :currentLocation", Toast.LENGTH_SHORT).show();
markerArray.add(new Driver(name, totalPassenger, busNum, latitude, longitude, currentLocation, estimatedTime));
}
}
Toast.makeText(MainMapActivity.this, "markerArraySize: "+markerArray.size(), Toast.LENGTH_SHORT).show();
for (i = 0; i < markerArray.size(); i++) {
createMarker(markerArray.get(i).getDriversName(), markerArray.get(i).getTotalPassenger(), markerArray.get(i).getBusNum(), markerArray.get(i).getLatitude(), markerArray.get(i).getLongitude(), markerArray .get(i).getLocation(), markerArray.get(i).getEstimatedTime());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想更新我的内容,ArrayList
以便每当Firebase(特别是纬度和经度)发生变化时,标记都不会冗余/多次.
因此,我从您的代码中了解到,您希望唯一地标识应用程序中每个驱动程序位置的更改.
所以是的,保持一个HashMap
很好的主意,因为您不必担心用于识别特定驱动程序的位置变化的唯一键.
但是,因此,我建议将Firebase中的数据提取保存在本地sqlite数据库文件中,每次更新时,您都可以重新分析数据以再次创建标记(即刷新标记).
例如,您可以有三个表.
driver_id
)trip_id
和Trip表中的每一行都与a相关联driver_id
)表可能看起来像
司机表
driver_id - 1
name - Driver 1
driver_id - 2
name - Driver 2
Run Code Online (Sandbox Code Playgroud)
旅行表
trip_id - 1
driver_id - 1
trip_id - 2
driver_id - 1
trip_id - 3
driver_id - 2
Run Code Online (Sandbox Code Playgroud)
骑表
trip_id - 1
driver_id - 1
longitude - 9.4
latitude - 38
updateTime - 78783232
trip_id - 1
driver_id - 1
longitude - 5.8
latitude - 53
updateTime - 78783242
trip_id - 1
driver_id - 1
longitude - 78
latitude - 56
updateTime - 78783252
trip_id - 2
driver_id - 1
longitude - 8
latitude - 77
updateTime - 78783262
Run Code Online (Sandbox Code Playgroud)
现在,从Rides表中,每次Firebase更新本地数据库并重新绘制地图中每个驱动程序的标记时,都会重新分析数据.
您可以使用简单的SQL查询来创建驱动程序基于的路径updateTime
.基于路径点排序updateTime
并删除具有相同经度和纬度的任何连续数据.
希望有所帮助.
归档时间: |
|
查看次数: |
3124 次 |
最近记录: |