我正在尝试使用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(一段时间);