标记上的索引值问题
index value issue on the markers
我想在 fcmUsers 列表中的标记上显示这些值
当用户点击标记时,它将在 fcmUsers 列表的文本视图中显示自己的值或数据
fcmUsers 列表具有 public 长创建时间;和 public Long hajjappnum;
DatabaseReference UserRef = FirebaseDatabase.getInstance().getReference().child("GPSLocationHistory").child("DevicesLatest");
UserRef.keepSynced(true);
new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
FirebaseDatabase database = FirebaseDatabase.getInstance();
// myRef = database.getReference("GPSLocationHistory/DevicesLatest");
UserRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
latLngList.clear();
mMap.clear();
if (marker != null) {
marker.remove();
}
Toast.makeText(MapsActivity.this, "change", Toast.LENGTH_SHORT).show();
Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
fcmUsers = new ArrayList<>();
i = 0;
while (dataSnapshots.hasNext()) {
DataSnapshot dataSnapshotChild = dataSnapshots.next();
ModelClassFireBase fcmUser = dataSnapshotChild.getValue(ModelClassFireBase.class);
fcmUsers.add(fcmUser);
LatLng latLng = new LatLng(Double.parseDouble(fcmUsers.get(i).lati.toString()), Double.parseDouble(fcmUsers.get(i).longi.toString())); // Use your server's methods
latLngList.add(latLng);
mark1 = mMap.addMarker(new MarkerOptions().title(fcmUsers.get(i).Battery.toString()).position(latLngList.get(i)));//.icon(BitmapDescriptorFactory.fromResource(R.drawable.female4)));
// Toast.makeText(getApplicationContext(), uniqueids.get(i).toString(), Toast.LENGTH_LONG).show();
markerList.add(mark1);
i++;
if (fcmUsers.size() > 0) {
} else {
// Display dialog for there is no user available.
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// for handling database error
}
});
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.info_widow_layout, null);
// Getting the position from the marker
LatLng latLng = arg0.getPosition();
// Getting reference to the TextView to set latitude
TextView userbattery = (TextView) v.findViewById(R.id.tv_lat);
// Getting reference to the TextView to set longitude
// TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);
// ImageView userimage = (ImageView) v.findViewById(R.id.userimage);
userbattery.setText("user battery:" + fcmUsers.get(i-1).Battery.toString());
return v;
}
});
首先,我看不出有什么理由需要将 Arraylists 存储在 Firebase 方法之外。我认为您应该删除它们和 i
变量。
如果您确实需要列表,它们应该只从 onDataChange
开始初始化
其次,您的记号笔目前只显示电池。
new MarkerOptions().title(fcmUsers.get(i).Battery.toString())
您可以为要显示的数据制作一个字符串变量,然后替换它。
如果要用标记存储整个对象,请使用标签。
final ModelClassFireBase fcmUser = dataSnapshotChild.getValue(ModelClassFireBase.class);
Marker mark = mMap.addMarker(new MarkerOptions()
.title(user.getBattery())
.position(new LatLng(user.getLatitude(), user.getLongitude());
mark.setTag(user);
在下方,获取标签
final ModelClassFireBase user = ((ModelClassFireBase) arg0).getTag();
userbattery.setText("user battery:" + user.getBattery());
你不能在这个地方使用 get(i)
因为那不是那个标记的实际位置
我想在 fcmUsers 列表中的标记上显示这些值
当用户点击标记时,它将在 fcmUsers 列表的文本视图中显示自己的值或数据
fcmUsers 列表具有 public 长创建时间;和 public Long hajjappnum;
DatabaseReference UserRef = FirebaseDatabase.getInstance().getReference().child("GPSLocationHistory").child("DevicesLatest");
UserRef.keepSynced(true);
new GetDataFromFirebase().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
FirebaseDatabase database = FirebaseDatabase.getInstance();
// myRef = database.getReference("GPSLocationHistory/DevicesLatest");
UserRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
latLngList.clear();
mMap.clear();
if (marker != null) {
marker.remove();
}
Toast.makeText(MapsActivity.this, "change", Toast.LENGTH_SHORT).show();
Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
fcmUsers = new ArrayList<>();
i = 0;
while (dataSnapshots.hasNext()) {
DataSnapshot dataSnapshotChild = dataSnapshots.next();
ModelClassFireBase fcmUser = dataSnapshotChild.getValue(ModelClassFireBase.class);
fcmUsers.add(fcmUser);
LatLng latLng = new LatLng(Double.parseDouble(fcmUsers.get(i).lati.toString()), Double.parseDouble(fcmUsers.get(i).longi.toString())); // Use your server's methods
latLngList.add(latLng);
mark1 = mMap.addMarker(new MarkerOptions().title(fcmUsers.get(i).Battery.toString()).position(latLngList.get(i)));//.icon(BitmapDescriptorFactory.fromResource(R.drawable.female4)));
// Toast.makeText(getApplicationContext(), uniqueids.get(i).toString(), Toast.LENGTH_LONG).show();
markerList.add(mark1);
i++;
if (fcmUsers.size() > 0) {
} else {
// Display dialog for there is no user available.
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// for handling database error
}
});
mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
// Defines the contents of the InfoWindow
@Override
public View getInfoContents(Marker arg0) {
// Getting view from the layout file info_window_layout
View v = getLayoutInflater().inflate(R.layout.info_widow_layout, null);
// Getting the position from the marker
LatLng latLng = arg0.getPosition();
// Getting reference to the TextView to set latitude
TextView userbattery = (TextView) v.findViewById(R.id.tv_lat);
// Getting reference to the TextView to set longitude
// TextView tvLng = (TextView) v.findViewById(R.id.tv_lng);
// ImageView userimage = (ImageView) v.findViewById(R.id.userimage);
userbattery.setText("user battery:" + fcmUsers.get(i-1).Battery.toString());
return v;
}
});
首先,我看不出有什么理由需要将 Arraylists 存储在 Firebase 方法之外。我认为您应该删除它们和 i
变量。
如果您确实需要列表,它们应该只从 onDataChange
其次,您的记号笔目前只显示电池。
new MarkerOptions().title(fcmUsers.get(i).Battery.toString())
您可以为要显示的数据制作一个字符串变量,然后替换它。
如果要用标记存储整个对象,请使用标签。
final ModelClassFireBase fcmUser = dataSnapshotChild.getValue(ModelClassFireBase.class);
Marker mark = mMap.addMarker(new MarkerOptions()
.title(user.getBattery())
.position(new LatLng(user.getLatitude(), user.getLongitude());
mark.setTag(user);
在下方,获取标签
final ModelClassFireBase user = ((ModelClassFireBase) arg0).getTag();
userbattery.setText("user battery:" + user.getBattery());
你不能在这个地方使用 get(i)
因为那不是那个标记的实际位置