【问题标题】:how to set firebase getChildren values in marker如何在标记中设置firebase getChildren值
【发布时间】:2023-03-03 00:08:01
【问题描述】:

在 android 中,我通过这段代码得到 firebase response(latt,lngg)

ref.child("USerCurrentLocation").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        size = (int) dataSnapshot.getChildrenCount();
        lattDonor = new double[size];
        lnggDonor = new double[size];
        int i = 0;
        Log.d("size1"," size = "+size);
        Log.d("latt",dataSnapshot.getKey()+" , "+dataSnapshot.getValue());
        for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
            Double latt = (Double) messageSnapshot.child("latt").getValue();
            Double lngg = (Double) messageSnapshot.child("lngg").getValue();
            Log.d("latt1", latt + " , " + lngg);
            Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latt,lngg)).title("Donor"));
            markers.add(marker);
            }
        }

现在我在日志中得到了这个结果:

02-02 14:26:50.175 4032-4032/com.example.haawztech.abdapplication D/latt: USerCurrentLocation , {2233={lngg=45.34534234, latt=56.44332453}, 1234={lngg=67.0833, latt=46.45398745}, 410060215718654={lngg=67.0555454, latt=24.8731362}, 2341={lngg=67.0333, latt=24.9167}, 1345={lngg=53.09865348, latt=34.45739834}}
02-02 14:26:50.185 4032-4032/com.example.haawztech.abdapplication D/latt1: 46.45398745 , 67.0833
02-02 14:26:50.185 4032-4032/com.example.haawztech.abdapplication D/latt1: 34.45739834 , 53.09865348
02-02 14:26:50.185 4032-4032/com.example.haawztech.abdapplication D/latt1: 56.44332453 , 45.34534234
02-02 14:26:50.195 4032-4032/com.example.haawztech.abdapplication D/latt1: 24.9167 , 67.0333
02-02 14:26:50.195 4032-4032/com.example.haawztech.abdapplication D/latt1: 24.8731362 , 67.0555454

但是当我在标记中设置这些值时,我刚刚得到标记,这是最后一个 latt lngg 在这个 firebase 孩子中。

如何在此循环中获取此项目中的所有值标记?

我的firebase数据集id

【问题讨论】:

  • 你得到了正确的纬度和正确的日志
  • 是的,但我想在标记中设置所有 latt lngs ... .
  • 我认为从 firebase 获取详细信息没有问题,因为您正在获取所有 latlong
  • 但是当我尝试在 latt lngg 上设置标记时我遇到了问题,我所有的值都只显示一个标记,这是我数据库中的最后一个标记
  • 您可以尝试将这个 lat long 放入数组中,并在从 firebase 获取后显示该数组中的标记吗?如果然后问题仍然存在,那么它的显示标记问题

标签: android arraylist firebase google-maps-markers


【解决方案1】:

您需要创建一个标记数组,用于保存所有标记。用变量'size'初始化数组

    Marker[] allMarkers = new Marker[size];

然后在 DataSnapshot for..loop 中引入一个 for..loop。最后使用之前创建的数组对象在地图上创建标记。下面是如何实现它的完整代码。

    ref.child("USerCurrentLocation").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    size = (int) dataSnapshot.getChildrenCount();

    lattDonor = new double[size];
    lnggDonor = new double[size];
    int i = 0;
    Log.d("size1"," size = "+size);
    Log.d("latt",dataSnapshot.getKey()+" , "+dataSnapshot.getValue());

    Marker[] allMarkers = new Marker[size];


    for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {

        for(int i=0;i<=size;i++) {

        try {

        Double latt = (Double) messageSnapshot.child("latt").getValue();
        Double lngg = (Double) messageSnapshot.child("lngg").getValue();
        Log.d("latt1", latt + " , " + lngg);

        allMarkers[i] = mMap.addMarker(new MarkerOptions().position(new LatLng(latt,lngg)).title("Donor"));

       // markers.add(marker);
        } catch(Exception ex){}
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2016-03-03
    • 2015-11-05
    相关资源
    最近更新 更多