我怎样才能返回值从 Retrofit 2 查询或做类似的事情?我需要返回isconnected变量。问题是,当我调用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;
}
2条答案
按热度按时间tv6aics11#
这个
enqueue
函数在后台运行api调用,一个不同的线程。任何api调用都不应该在主线程中执行,这就是为什么不能从
enqueue
.但是,可以在主线程上就地运行api调用。不建议这样做,因为在处理api调用时,它会使应用程序ui冻结。
一种方法是使用一组回调来实现您要实现的功能。
在方法中输入两个参数。
onSuccess
,和onFailure
. 两个都是lambdasonSuccess
有一个bool
参数,以及onFailure
有一个Exception
参数。这就是你的代码的样子
在ui中
hjzp0vay2#
改装
enqueue
是具有异步回调的非阻塞调用。而是使用execute()