Как показать ошибку, когда база данных Firebase Realtime запрещает доступ? - PullRequest
2 голосов
/ 26 марта 2020

Мое приложение извлекает данные из моей базы данных Firebase. Полученные данные просматриваются в TextView. Перед извлечением TextView просто показывает подсказку (имя пользователя здесь).

При написании правил в базе данных Firebase я переключил «.read» и «.write» в FALSE. Это означает, что никто не может получить доступ к данным.

Но тогда мой TextView продолжает показывать подсказку. Как получить ответ в приложении о том, что в доступе отказано, чтобы я мог создать всплывающее окно с сообщением, что ДОСТУП ОТКЛОНЕН.

Любой способ получить такое подтверждение?

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

поэтому, когда мои правила, как указано выше. Вывод:

enter image description here

, но когда я изменяю правила на

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

Вывод:

enter image description here

Таким образом, пользователь считает, что его ca sh все еще загружается, но я хочу показать ему ошибку, которая ОТКАЗАНА В ДОСТУПЕ. Любой способ сделать это?

Мой код:

String cashOwnValue = "start";
try {
    cashOwnValue = dataSnapshot.child("startCash").getValue().toString();
} catch (Throwable e) {
    Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
cashValue.setText(cashOwnValue);
Toast.makeText(getApplicationContext(), "Your balance has changed.", Toast.LENGTH_SHORT).show();

РЕДАКТИРОВАТЬ: Когда доступ запрещен, чтобы сообщить пользователю, что ваш запрос был отклонен нужно кодировать это:

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    Toast.makeText(getApplicationContext(), "Access Denied", Toast.LENGTH_LONG).show();
}

и, чтобы избежать app cra sh, если пользовательские данные не найдены, вы используете блок try-catch, как ответили ниже. (что также потребовало длительного обсуждения с @PrajwalW).

1 Ответ

0 голосов
/ 27 марта 2020

Вот вам go полное решение:

  1. Сделайте read = True и write = False. Это только разрешит доступ на чтение и вернет разрешение «Отказано в доступе на запись».
  2. Для обработки этой ошибки: используйте блок try - catch для выполнения.
  3. В блоке try напишите свой код и в catch Блок обрабатывает ваше исключение.
  4. В соответствии с вашим условием, вы хотите показать ошибку или текст по умолчанию, когда пользователь пытается изменить поле. Для этого напишите этот код в блоке catch.
  5. Теперь ваша новая ошибка текстового сообщения не обновляется:

Внесите следующие изменения:

String cashOwnValue = null; // Глобально установлено в нулевое начальное значение.

        try {
            cashOwnValue = "start";
            cashOwnValue = dataSnapshot.child("startCash").getValue().toString();
            cashValue.setText(cashOwnValue);  //add the setText() inside the try block like this...
        Toast.makeText(getApplicationContext(), "Your balance has changed.", Toast.LENGTH_SHORT).show();

        } catch (Throwable e) {
            Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
        }
...