Требуется модификация ответа на onBackPressed - PullRequest
0 голосов
/ 28 сентября 2019

Я успешно сделал несколько асинхронных звонков.Но теперь у меня возникла проблема, мне нужны данные вызова дооснащения, доступные в моем методе onBackPressed, при других вызовах я запускаю свой код в методе onResponse вызова дооснащения, но теперь как я могу это сделать ...Мне нужны данные, прежде чем пользователь нажмет кнопку, также я не люблю делать это синхронно, так как это может заблокировать приложение .... Для вашей информации, необходимые данные - это данные конфигурации, которые говорят приложению показывать или нет тост при нажатииКнопка назад.Какой правильный способ сделать это?

   public void onCreate(Bundle savedInstanceState) {
        callGetConfigApi().enqueue(new Callback<ResponseConfig>() {
            @Override
            public void onResponse(Call<ResponseConfig> call, Response<ResponseConfig> response) {
                List<Config> results = fetchResults(response);

        config_string = results.getStringText();
            }

            @Override
            public void onFailure(Call<ResponseCategory> call, Throwable t) {
                t.printStackTrace();
                showErrorView(t);
            }
        });
    }

    public void onBackPressed() {
        Toast.makeText(this, config_string, Toast.LENGTH_SHORT).show();
    }

это правильно?что если пользователь нажмет до того, как данные будут готовы?

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Выполнение вызовов API - это асинхронная операция, она требует времени и, что более важно, работает в фоновом потоке.Когда вы нажимаете кнопку «назад», пользователь обычно хочет вернуться назад, но выполнение вызовов API будет иметь два недостатка: либо вам придется заставить пользователя ждать ответа на вызов, а затем соответствующее сообщение, оно никогда не будетбеспроблемный опыт и вызовет плохой UI / UX, во-вторых, вы не можете запустить другое действие между вызовами API, вызов API никогда не завершится, потому что когда действие удаляется из стека, вызывается onDestroy(), и оно уничтожается иВы также можете получить ошибку.

Я бы предложил сделать вызов API и извлечь данные в методе onStart().После этого, когда пользователь нажимает кнопку «Назад», вы не выполняете вызов API, вы можете получить доступ к уже извлеченным данным и делать все, что захотите.

Если пользователь каким-либо образом нажимает кнопку назад, прежде чем данные будут готовы,Вы можете получить NullPointerException тост.Вы можете просто проверить это перед отображением

1 голос
/ 28 сентября 2019

У вас есть два варианта:

1) Показать диалоговое окно «Ход / загрузка» и сделать для него значение setCancelable(false), которое будет отключать функциональность кнопки «Назад» до тех пор, пока диалоговое окно не станет видимым / отображающим

2) Повторите onBackPressed, который, как я вижу, вы уже сделали в своем коде, просто отобразите полезное сообщение, чтобы пользователь понял необходимость оставаться на экране перед выходом или переходом на другой экран, если вы не звоните.super.onBackPressed() пользователь не сможет вернуться к предыдущей активности.(Исключительный случай «пользователь нажимает кнопку ДОМОЙ или ПОСЛЕДНИЕ КНОПКИ»)

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