Подождите, пока не выполнится метод подключения, затем перейдите к следующей строке. Retrofit Callback - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь получить результат Соединения, чтобы обработать его с помощью Retrofit API, вот мой код:

  public boolean connect() {
    this.callback.enqueue(new Callback<T>() {
        @Override
        public void onResponse(@NonNull Call<T> call, @NonNull 
         Response<T> response) {
            assert response.body() != null;
            setConnectionValid(true);
            try {
                Log.d(Constants.TAG, "onResponse: " + response.body());
                setResponse(response);

            } catch (Exception e) {
                Log.i(Constants.TAG, "onResponse: " + 
        e.getLocalizedMessage());
            }

        }

        @Override
        public void onFailure(@NonNull Call<T> call, @NonNull 
       Throwable t) {
            setThrowable(t);
            Log.i(Constants.TAG, "onError: " + 
        t.getLocalizedMessage());
            setConnectionValid(false);
        }
    });
    return isConnectionValid();
}

и выполнить метод connect в Controller

  private void loginValidate()  {
    boolean isConnected;
    RetroConnection retroConnection;
    IRetrofit api = RetroSingleton.getRetroSingleton(context).create(IRetrofit.class);
    Call<User> call = api.login(email.getText().toString(), password.getText().toString(), "token");
    retroConnection = new RetroConnection<>(call);
    isConnected= retroConnection.connect();
    Log.i(TAG, "loginValidate: "+isConnected); //return false 
    if (isConnected) {
        ToastMessage.message(context, ConstantMessages.LOGIN_SUCCESS);
    } else {
        ToastMessage.message(context, ConstantMessages.LOGIN_FAILED);
    }
}

, ноответ занимает какое-то время, а isConnected всегда возвращает false.Дело в том, что нужен способ подождать, пока соединение установится, и обработать его без использования Threads.sleep (некоторое время);

...