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