为什么方法不返回true?

时间:2018-02-06 18:29:23

标签: java android android-studio

我在方法中有一个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;
        }
    }
}

2 个答案:

答案 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