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更强大,可以说这是不可能的。