我想要做的是执行onSuccess
方法时,queryLogin
返回true
,而如果onFailuer
方法执行,则queryLogin
返回{{ 1}};
但是如你所知,在java中,我无法修改内部类的外部类值。所以我想知道如何解决问题并实现目标。
false
答案 0 :(得分:1)
让类方法返回一个布尔值并捕获它
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;
}
});
<强>更新强>
正如您所看到的那样,成功&#39;是一种覆盖方法,所以如果我从&#39; void&#39;更改返回值到&#39;布尔&#39;,它仍未覆盖
实际上,如果变量不是最终的,你不能在内部类中操纵它们......但是,要小心,知道你没有创建类,如果它只在本地使用,在这个方法范围内,那么你可以用这个:
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;
}
});
答案 1 :(得分:1)
您应该向外部类添加特定方法,并从内部类调用它。这个方法应该接收一个参数并简单地设置一个外部类成员变量;然后根据需要使用该变量。
答案 2 :(得分:1)
您尝试在此处混合使用同步和异步行为,这是行不通的。
post()
方法只会触发HTTP帖子,并且登录方法的执行将持续到最后,而不会等待该帖子的结果。这就是AsyncHttpResponseHandler
的用途。当post()
的回复到达时,会调用它。
网络活动(以及可能需要很长时间的所有其他任务)始终不会冻结您应用的用户界面。
答案 3 :(得分:0)
您可以在类中创建方法,如
processQueryResult(boolean isSuccess){
//..some logic with isSuccess value
}
从onSuccess
和onFailure
调用它并带有相应的参数。