Java if-else语句的意外行为

Java if-else语句的意外行为,java,android,android-studio,okhttp3,Java,Android,Android Studio,Okhttp3,我有下面的if-else语句,它们是在单击按钮后触发的 if (!rf.registerUser(url, username.getText().toString(), phoneNumber.getText().toString(), materialDesignSpinner.getText().toString(), password.getText().toString(), registrationjson)) { // below registeringError

我有下面的
if-else
语句,它们是在单击按钮后触发的

if (!rf.registerUser(url,
    username.getText().toString(), phoneNumber.getText().toString(),
    materialDesignSpinner.getText().toString(), password.getText().toString(), registrationjson)) {

// below registeringError is to show an alert when error occurs

    rf.registeringError(v.getContext(), warning, getResources().getString(R.string.registeringError));
    System.out.println("Failure!");


} else if (rf.registerUser(url,
     username.getText().toString(), phoneNumber.getText().toString(),
     materialDesignSpinner.getText().toString(), password.getText().toString(), registrationjson)) {

// below registrationSuccess method is to show an alert after successful registration

     rf.registrationSuccess(v.getContext(), getResources().getString(R.string.congrats),
     getResources().getString(R.string.successfull_registration));

     System.out.println("Success!");
}
下面是registerUser方法代码

 public boolean registerUser(String uri, String username, String phone, String state, String password, registrationJson registrationjson) {
        OkHttpClient client;
        RequestBody body;

        final MediaType JSON
                = MediaType.parse("application/json; charset=utf-8");

        registrationjson.setUsername(username);
        registrationjson.setPhone(phone);
        registrationjson.setState(state);
        registrationjson.setPassword(password);

        Gson gson = new Gson();
        final String jsonFromform = gson.toJson(registrationjson);

        client = new OkHttpClient();
        body = RequestBody.create(JSON, jsonFromform);
        Request request = new Request.Builder()
                .url(uri)
                .post(body)
                .addHeader("content-type", "application/json; charset=utf-8")
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("Failure!!");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                switch (response.code()){
                    case 400:
                        changeStatusFalse(); // change status boolean to false
                    case 200:
                        changeStatusTrue(); //change status boolean to true
                }
            }

        });
        return status; // return status
    }
我面临的问题是,当我填写登记表并按下按钮(希望一切正常)时,我会收到
registeringError
警报,然后在不关闭屏幕的情况下再次按下按钮,我会收到
registrationSuccess
警报

我尝试在
registerUser
中使用
if-else
,而不是
switch语句

WIERD THING:我试图将
返回
返回状态
更改为
返回真值
。首先执行了
registeringError
警报,然后在再次按下按钮后执行了
successRegistration


注意:当我按下按钮时,在服务器记录成功消息之前,错误警报在纳秒内显示(以描述它的速度),但我不确定这是否真的是问题所在,因为检查响应状态的代码在
onResponse
method

register中。由于服务器的原始请求尚未完成(它在队列中),此函数将始终给出false,您的函数将立即返回,这就是为什么会弹出错误消息的原因。@Vijay感谢您的澄清,但如何使函数等待服务器响应?@Vijay是因为该方法在非活动类中吗?如果是,您知道如何在不将代码移动到activity类的情况下使其运行吗?您可以使用通信api(如)在收到服务器的响应时向注册的activity发送消息,或者您可以参考