Java 如何从onResponse返回值

Java 如何从onResponse返回值,java,android,retrofit,wait,Java,Android,Retrofit,Wait,如何从翻新2查询返回值或执行类似操作? 我需要返回未连接的变量。 问题是,当我调用testConnection()时,它会自动返回false,因为发送到服务器的请求尚未处理。 我必须等待请求得到处理,但如何处理 static boolean isConnected = false; public static boolean testConnection() { apiInterface = ApiClient.getApiClient().create(Ap

如何从翻新2查询返回值或执行类似操作? 我需要返回未连接的变量。 问题是,当我调用testConnection()时,它会自动返回false,因为发送到服务器的请求尚未处理。 我必须等待请求得到处理,但如何处理

static boolean isConnected = false;

public static boolean testConnection() {
        
        apiInterface = ApiClient.getApiClient().create(Api.class);
        
        Call<String> call = apiInterface.testConnection();
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                
                if (response.body().equals("Connected")) {
                    isConnected = true;
                } else {
                    isConnected = false;
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                Log.d("infomessage", t.getMessage());
                isConnected = false;
            }
        });
        return isConnected;
    }
static boolean isConnected=false;
公共静态布尔testConnection(){
apinterface=ApiClient.getApiClient().create(Api.class);
Call Call=apinterface.testConnection();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body().equals(“Connected”)){
断开连接=正确;
}否则{
断开连接=错误;
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(“infomessage”,t.getMessage());
断开连接=错误;
}
});
返回不连接;
}

函数的
排队
功能在后台运行API调用,即另一个线程

任何API调用都不应该在主线程中执行,这就是为什么您不能从
队列中返回

但是,您可以在主线程上就地运行API调用。不建议使用它,因为它将在处理API调用时使应用程序UI冻结

实现您试图实现的一种方法是使用一组回调

在方法中添加了两个参数<代码>成功时
,失败时。两者都是lambda,
onSuccess
具有
bool
参数,
onFailure
具有
异常
参数

这就是您的代码的外观

public static boolean testConnection(Function<Boolean, Void> onSuccess, Function<Exception, Void> onFailure) {
        
        apiInterface = ApiClient.getApiClient().create(Api.class);
        
        Call<String> call = apiInterface.testConnection();
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                
                if (response.body().equals("Connected")) {
                    onSuccess.invoke(true);
                } else {
                    onSuccess.invoke(false);
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                Log.d("infomessage", t.getMessage());
                onSuccess.invoke(false);
                onFailure.invoke(t);
            }
        });
        return isConnected;
    }

改型的
排队
是一个带有异步回调的非阻塞调用。相反,使用
execute()

可能对您有用
testConnection((isConnected) -> {

}, (error) -> {

});