如何将内class的值return转为外class?
How to return the value from inner class to outer class?
我想做的是当onSuccess
方法执行时,queryLogin
returntrue
,而如果onFailuer
方法执行,queryLogin
return false
;
但是如您所知,在 java 中,我无法从内部 class 修改外部 class 值。所以我只是想知道如何解决问题并实现我的目标。
public static boolean queryLogin(String username, String passowrd){
boolean isSuccess = false;
params.put("username", username);
params.put("password", passowrd);
VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
isSuccess = true;//cannot
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
isSuccess = false;//cannot
}
});
return isSuccess;
}
使 class 方法返回布尔值并捕获它
boolean isSucces = VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public boolean onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
return true;
}
@Override
public boolean onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
return false;
}
});
更新:
As you can see 'onSuccess' is an override method, so if I change the return value from 'void' to 'boolean', it is not override still
实际上,如果变量不是最终的,你不能在内部 classes 中操作它们......但是,要小心,知道你没有创建 class,并且如果它被使用只在本地,在这个方法范围内,那么你可以使用这个:
final boolean isSuccess[] = {false};
VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public boolean onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
isSuccess[0] = true;
}
@Override
public boolean onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
isSuccess[0] = true;
}
});
您应该将特定方法添加到外部 class,并从内部 class 调用它。此方法应接收一个参数并简单地设置一个外部 class 成员变量;然后根据需要使用该变量。
您试图在此处混合同步和异步行为,这是行不通的。
post()
方法仅触发 HTTP post 并且您的登录方法的执行会继续执行到最后,而无需等待该 post 的结果。这就是 AsyncHttpResponseHandler
的用途。当对 post()
的回复到达时调用它。
网络活动(以及所有其他可能需要很长时间的任务)始终是异步的,以免冻结您应用的 UI。
您可以在 class 中创建方法,例如
processQueryResult(boolean isSuccess){
//..some logic with isSuccess value
}
在 onSuccess
和 onFailure
中使用相应的参数调用它。
我想做的是当onSuccess
方法执行时,queryLogin
returntrue
,而如果onFailuer
方法执行,queryLogin
return false
;
但是如您所知,在 java 中,我无法从内部 class 修改外部 class 值。所以我只是想知道如何解决问题并实现我的目标。
public static boolean queryLogin(String username, String passowrd){
boolean isSuccess = false;
params.put("username", username);
params.put("password", passowrd);
VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
isSuccess = true;//cannot
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
isSuccess = false;//cannot
}
});
return isSuccess;
}
使 class 方法返回布尔值并捕获它
boolean isSucces = VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public boolean onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
return true;
}
@Override
public boolean onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
return false;
}
});
更新:
As you can see 'onSuccess' is an override method, so if I change the return value from 'void' to 'boolean', it is not override still
实际上,如果变量不是最终的,你不能在内部 classes 中操作它们......但是,要小心,知道你没有创建 class,并且如果它被使用只在本地,在这个方法范围内,那么你可以使用这个:
final boolean isSuccess[] = {false};
VStarRestClient.post(LOGIN_URL, params, new AsyncHttpResponseHandler() {
@Override
public boolean onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
isSuccess[0] = true;
}
@Override
public boolean onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
String responseContent = new String(responseBody);
isSuccess[0] = true;
}
});
您应该将特定方法添加到外部 class,并从内部 class 调用它。此方法应接收一个参数并简单地设置一个外部 class 成员变量;然后根据需要使用该变量。
您试图在此处混合同步和异步行为,这是行不通的。
post()
方法仅触发 HTTP post 并且您的登录方法的执行会继续执行到最后,而无需等待该 post 的结果。这就是 AsyncHttpResponseHandler
的用途。当对 post()
的回复到达时调用它。
网络活动(以及所有其他可能需要很长时间的任务)始终是异步的,以免冻结您应用的 UI。
您可以在 class 中创建方法,例如
processQueryResult(boolean isSuccess){
//..some logic with isSuccess value
}
在 onSuccess
和 onFailure
中使用相应的参数调用它。