Android 如何将值从内部类返回到外部类?
我想做的是,当执行Android 如何将值从内部类返回到外部类?,android,inner-classes,anonymous-inner-class,Android,Inner Classes,Anonymous Inner Class,我想做的是,当执行onSuccess方法时,queryLogin返回true,而如果执行onFailuer方法,则queryLogin返回false; 但是您知道,在java中,我不能从内部类修改外部类的值。因此,我只是想知道如何解决这个问题,实现我的目标 public static boolean queryLogin(String username, String passowrd){ boolean isSuccess = false; params.put("usern
onSuccess
方法时,queryLogin
返回true
,而如果执行onFailuer
方法,则queryLogin
返回false
;
但是您知道,在java中,我不能从内部类修改外部类的值。因此,我只是想知道如何解决这个问题,实现我的目标
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;
}
使类方法返回布尔值并捕获它
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;
}
});
更新:
正如您所见,“onSuccess”是一个覆盖方法,因此如果我将返回值从“void”更改为“boolean”,它仍然不是覆盖方法 实际上,如果变量不是最终变量,就不能在内部类中操纵它们。。。但是,要小心,知道您没有创建该类,并且如果该类仅在本地使用,则在此方法范围内,您可以使用:
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;
}
});
您应该向外部类添加一个特定的方法,并从内部类调用它。这个方法应该接收一个参数并简单地设置一个外部类成员变量;然后根据您的意愿使用该变量。您试图在这里混合同步和异步行为,但这是行不通的
post()。这就是AsyncHttpResponseHandler
的作用。当对post()
的回复到达时调用它
网络活动(以及可能需要很长时间的所有其他任务)始终是异步的,以避免冻结应用程序的UI。您可以在类中创建方法,如
processQueryResult(boolean isSuccess){
//..some logic with isSuccess value
}
从带有相应参数的onSuccess
和onFailure
调用它时。正如您所见,“onSuccess”是一个重写方法,因此如果我将返回值从“void”更改为“boolean”,它仍然不是重写。@ShuaiWang这并不意味着您不能更改类声明,但如果您不能更改,请,请检查我的更新您是否尝试了Getter和setter以获得isSuccess
?是的,谢谢。我对回调方法机制有了更好的理解。在flatter
框架的Dart
语言中,通过在方法末尾使用“.then(){}”关键字,可以非常简单地将Async
方法转换为Sync
,我在Android Java中也有同样的问题,我认为Java更强大,可以说这是不可能的。