等待连接方法执行,然后移至下一行Retrofit Callback

时间:2018-12-30 16:35:24

标签: java android retrofit retrofit2

我正在尝试使用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();
}

并在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(一段时间);

0 个答案:

没有答案