无法更改匿名变量 class

Unable to change variable from anonymous class

我对 Java 和 Android 开发还很陌生。我正在尝试为我的网站制作一个应用程序。我正在使用 Retrofit 连接到我的 REST Web 服务。

以下是我用来遍历客户 ID 的一段代码,对于每个 ID,都会进行调用以检索与该 ID 关联的电子邮件。 authenticateUser 方法接收用户名、密码和 ID 列表(客户 ID)。 ID 位于 mywebsite/api/customers。 这些电子邮件位于 mywebsite/api/customers/id

public class Authentication {

    private static String receivedEmail;
    public static boolean authenticateUser(List<Integer> ids, final String username, String pass) {
        RestAdapter adapter = new RestAdapter.Builder().setEndpoint(MainActivity.ENDPOINT).build();
        AuthenticationUsernameAPI api = adapter.create(AuthenticationUsernameAPI.class);
        final boolean[] found = {false};
        for (Integer id: ids) {
            if (!found[0]) {
                api.getUserEmail(id.toString(), new Callback<CustomerLoginEmail>() {
                    @Override
                    public void success(CustomerLoginEmail customerLoginEmail, Response response) {
                        receivedEmail = customerLoginEmail.getCustomer().getEmail().toString();
                        if (receivedEmail.compareTo(username) == 0) {                        
                            found[0] = true;
                        }
                    }

                    @Override
                    public void failure(RetrofitError error) {
                        Log.d("ERROR", error.getMessage());
                    }
                });
            } else {
                return true;
            }
        }
        return false;
    }    
}   

方法authenticateUser总是returns错误。请帮忙

原因是循环注册回调并没有等待它们完成,所以它也没有等待检查是否实际调用了回调。由于回调没有及时完成,他们没有机会在 if 条件检查之前将 found[0] 更改为 true

您应该重构代码,使其等待每个回调完成。

我明白了。这很明显也很容易,但是由于我对这一切都不熟悉(或者我很愚蠢 :p),所以我花了很多时间。

我使用了 Retrofit 的 SYNCHRONOUS 调用。界面:

@GET("/user/{id}")
UserObject getUser(@Path("id") int id);

我在 AsyncTask 中这样调用它:

UserObject user = api.getUser();

希望这对像我这样的新手有帮助