如何将内class的值return转为外class?

How to return the value from inner class to outer class?

我想做的是当onSuccess方法执行时,queryLoginreturntrue,而如果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
}

onSuccessonFailure 中使用相应的参数调用它。