我在方法中有一个HTTP请求,我试图根据请求的响应返回true / false。我不确定我做错了什么,我认为这是非常直接的。在测试场景中,onResponse调用内部的条件返回true。不确定在翻译中迷失了什么。 另外,在最终条件中,“message”变量为紫色,在android studio中,我不知道这表示什么。我认为它与我的问题有关。建议?
public class DeleteButtonChecker {
public String message = new String();
public Boolean doCheck(int userID, int postID){
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
Call<ServerResponse> response = requestInterface.check(postID, userID);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, Response<ServerResponse> response) {
ServerResponse resp = response.body();
if(resp.getResult().equals(Constants.SUCCESS)){
message = "true";
} else {
message = "false";
}
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
}
});
if(message.equals("true")) {
return true;
} else{
return false;
}
}
}
答案 0 :(得分:2)
响应是异步处理的。在线:
response.enqueue(new Callback<ServerResponse>() {
...
您只是在返回响应后给出一个回调函数。但是,该方法不会被阻止,并继续到下一个语句 - 即:
if(message.equals("true")) {
可以翻译为:
if("".equals("true")) {
答案 1 :(得分:0)
根据您的条件,不能将异步请求视为同步调用。
如果是我的话,我会使用RxJava 2 Single
和Retrofit从请求中返回一个可用的结果。
检查出来:https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2
并确保学习一些可以帮助你在路上的RxJava