Как получить данные из ветки, включенной в список в Firebase - PullRequest
0 голосов
/ 14 мая 2019

Как показано на рисунке, у меня есть ветвь кампании, которая представляет собой динамический список, в котором я сохраняю данные о каждой кампании.

https://drive.google.com/file/d/16xe1aeAxEbtfiiUFoXtlqvFPucHejQp7/view?usp=sharing

Все данные кампании включают местоположение, которое является другой веткой внутрикампании, я хочу получить данные о местоположении всех кампаний.Я попробовал это, используя код ниже, но он возвращает нулевое значение.

void getCampaignsLocations(final OnGetDataListener onGetDataListener){
        onGetDataListener.onStart();
        Toast.makeText(this, "started", Toast.LENGTH_SHORT).show();
        DatabaseReference campaignsRoot = FirebaseDatabase.getInstance().getReference();
        DatabaseReference campaignsPath = campaignsRoot.child("campaigns");
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot ds: dataSnapshot.getChildren()){
                    LatLng l = ds.child("location").getValue(LatLng.class);
                    campaignsLocations.add(l);
                    onGetDataListener.onSuccess(dataSnapshot,0,"");
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };
        campaignsPath.addListenerForSingleValueEvent(valueEventListener);
    }

1 Ответ

1 голос
/ 15 мая 2019

Чтобы решить эту проблему, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference campaignsRef = rootRef.child("campaigns");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            double latitude = ds.child("location").child("latitude").getValue(Double.class);
            double longitute = ds.child("location").child("longitute").getValue(Double.class);
            Log.d(TAG, latitude ", " + longitute);
            LatLng latLng = new LatLng(latitude, longitute);
            //Do what you need to do with your LatLng object
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
campaignsRef.addListenerForSingleValueEvent(valueEventListener);

Обратите внимание, что для создания объекта LatLng необходимо выполнить цикл по объекту DataSnapshot, чтобы получитьlatitude и longitute.Невозможно отобразить дочерние элементы, которые существуют под узлом location, в объект LatLng.Кроме того, LatLng - это , а не a Поддерживаемый Firebase тип данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...