无法更改匿名变量 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();
希望这对像我这样的新手有帮助
我对 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();
希望这对像我这样的新手有帮助