java.lang.ClassCastException: java.util.ArrayList нельзя преобразовать в java.util.Map в базе данных Firebase Realtime

Использование базы данных Firebase в реальном времени:

java.lang.ClassCastException: java.util.ArrayList не может быть приведен к java.util.Map в базе данных Firebase Realtime в строке getUpdateData((Map)dataSnapshot.getValue());*

Структура базы данных Firebase здесь:

Нажмите здесь

Вот что я сделал:

public ArrayList<NewsModel> alNotificationModel;

DatabaseReference ref;
ref = FirebaseDatabase.getInstance().getReference().child("notification");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        getUpdateData((Map<String, Object>) dataSnapshot.getValue());
        pb1.setVisibility(View.GONE);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        //handle databaseError
    }
});

private void getUpdateData(Map<String, Object> users) {
    final ArrayList<NewsModel> alNotificationModel = new ArrayList<>();
    for (Map.Entry<String, Object> entry : users.entrySet()) {
        NewsModel notificationModel = new NewsModel();
        Map singleUser = (Map) entry.getValue();

        notificationModel.setNotificationId((Long) singleUser.get("notId"));
        notificationModel.setNotificationTitle((String) singleUser.get("notTitle"));
        notificationModel.setNotificationDescription((String) singleUser.get("notDescription"));

        alNotificationModel.add(notificationModel);
    }
}

person Dhaval Jotaniya    schedule 10.04.2018    source источник
comment
users определяется где? Ошибка говорит, что entry.getValue() это список, а не карта   -  person OneCricketeer    schedule 10.04.2018
comment
@cricket_007 обновил редактирование сейчас, пожалуйста, проверьте   -  person Dhaval Jotaniya    schedule 10.04.2018
comment
проверьте эту ссылку, чтобы получить данные как эффективно перебирать каждую запись на карте"> stackoverflow.com/questions/46898/   -  person Lingeshwaran    schedule 10.04.2018
comment
поделитесь структурой базы данных firebase   -  person yashkal    schedule 10.04.2018
comment
@Lucky поделился изображением   -  person Dhaval Jotaniya    schedule 10.04.2018


Ответы (2)


Здесь, чтобы решить проблему такого рода, в первую очередь вы должны понять, как работает firebase. Как и в текущем сценарии, firebase предоставит вам список, поэтому вы получаете ClassCastException, потому что данные, которые вы ввели в базу данных, то есть в серии 1,2... и т. д. здесь я говорю о ключах в ваших данных, если вы измените эти ключи с некоторым префиксом, скажем, not_1, not_2.... и так далее, он обязательно вернет вам хэш-карту типа String и Object. Пожалуйста, попробуйте этот сценарий и дайте мне знать. В противном случае, если вы не хотите изменять структуру своей базы данных, вы можете проверить, является ли моментальный снимок данных экземпляром списка или хэш-карты при извлечении данных. Вот ссылка к той же проблеме, с которой вы столкнулись, надеюсь, что это поможет вам, и параллельно у меня нет другой ссылки, чтобы вы лучше поняли, я обязательно добавлю к этому ответу

Вот как я добился успеха

person yashkal    schedule 10.04.2018
comment
нет, вы можете использовать что-либо в качестве ключа, кроме специальных символов - person Dhaval Jotaniya; 10.04.2018

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

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference notificationRef = rootRef.child("notification");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<NewsModel> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            NewsModel newsModel = ds.getValue(NewsModel.class);
            list.add(newsModel);
        }
        //Do what you need to do with this list
        Log.d("TAG", list.toString()); //To see is not emplty
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
notificationRef.addListenerForSingleValueEvent(valueEventListener);
person Alex Mamo    schedule 10.04.2018