Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 35
1

Чтение данных из БД firebase всегда возращает null

23.04.2018, 00:03. Просмотров 932. Ответов 5

Добрый вечер!
Пишу игру для ОС Android. Возникла проблема с чтением данных из БД при первом входе в приложение:
при запуске приложения вызывается метод getGame(), но он всегда возращает null.
Пользователь и ссылка определяются верно. соединение с БД есть (сохранение проходит успешно).
Что Вы можете посоветовать?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public Game getGame() {
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        if (user != null)
            mDatabase = FirebaseDatabase.getInstance().getReference().child(user.getUid());
 
        mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                game = snapshot.getValue(Game.class);
            }
 
            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("er");
            }
 
        });
        return game;
    }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2018, 00:03
Ответы с готовыми решениями:

FindViewById() возращает null
Добрый день! Воспроизвожу код из книги Head First Android. При получении элементов при помощи...

Функция возращает NULL
Здравствуйте. Есть простейшая функция на MySQL: delimiter // create function avp(x varchar(25))...

При передачи данных из BeginForm в RedirectToRouteResult всегда получается id равное null
При передачи данных из BeginForm в RedirectToRouteResult всегда получается id равное null Не...

запрос с characterization возращает поле null в Index Server
в iis 5.0 поишу запрос var objQuery = Server.CreateObject('ixsso.Query'); var util =...

Переменная всегда null
Приветствую. Никак не пойму, почему переменная conf получается = null. Собственно порядок...

5
androbro
358 / 314 / 72
Регистрация: 17.10.2014
Сообщений: 924
23.04.2018, 09:45 2
XXX15, ну так вроде бы получение данных из базы происходит асинхронно, поэтому вы и получаете всегда null.
Цитата Сообщение от XXX15 Посмотреть сообщение
Что Вы можете посоветовать?
например крутить какой нить ProgressBar пока не получите данные из базы.
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 35
23.04.2018, 11:38  [ТС] 3
Сделал так, но результат прежний
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
        mDialog = new ProgressDialog(this);
        mDialog.show();
 
        new Thread(new Runnable() {
            @Override
            public void run(){
                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                DatabaseReference mDatabase;
                mDatabase = FirebaseDatabase.getInstance().getReference("games");
 
                if (user != null) {
                    mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot snapshot) {
                            game = snapshot.getValue(Game.class);
                        }
 
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            System.out.println("er");
                        }
 
                    });
                }
                mDialog.dismiss();
            }
        }).start();
0
+1
328 / 161 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
23.04.2018, 12:58 4
Ну хрен знает. Типа того.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    public Game getGame() {
        mDialog = new ProgressDialog(this);
        mDialog.show();
 
        new Thread(new Runnable() {
            @Override
            public void run() {
                final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                DatabaseReference mDatabase;
                mDatabase = FirebaseDatabase.getInstance().getReference("games");
 
                if (user != null) {
                    mDatabase.child(user.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot snapshot) {
                            game = snapshot.getValue(Game.class);
                        }
 
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            System.out.println("er");
                        }
 
                    });
                }
            }
        }).start();
        where(game == null) {
            sleep(100);
        }
        mDialog.dismiss();
        return game;
    }
Добавлено через 9 минут
Блин, сижу и чувствую, что что-то не то написал. Я еще из мускула не проснулся )
while же.
0
Pablito
2862 / 2274 / 768
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
23.04.2018, 13:12 5
этот while будет тормозить UI поток

задача решается проще некуда - в getGame передать callback или прямо оттуда делать setGame() куда требуется
0
XXX15
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 35
23.04.2018, 15:06  [ТС] 6
попробовал. программа циклиться. просто черный экран.

Добавлено через 9 минут
А вообще если во время отладки поставить точку остановки на метод onDataChange то он в него не заходит...
0
23.04.2018, 15:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2018, 15:06

Событие всегда Null
Доброго времени суток. Есть два класса class MainViewModel : BindableBase { ...

Wordpress $post всегда null
Здравствуйте. Пытаюсь написать плагин. Плагин работает как нужно. Но переменная $post в любой точке...

Параметр контроллера всегда null
Доброго времени суток. Вопрос банальный, как мне кажется, но почему то у меня это не работает......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.