如何将值从内部类返回到外部类?

时间:2015-10-14 08:51:11

标签: android inner-classes anonymous-inner-class

我想要做的是执行onSuccess方法时,queryLogin返回true,而如果onFailuer方法执行,则queryLogin返回{{ 1}}; 但是如你所知,在java中,我无法修改内部类的外部类值。所以我想知道如何解决问题并实现目标。

false

4 个答案:

答案 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
}

onSuccessonFailure调用它并带有相应的参数。