【发布时间】:2020-08-06 11:29:25
【问题描述】:
我将一个 lambda 表达式作为参数传递给一个方法,并且我想修改一个在 lambda 表达式外部定义的变量。
我已经尝试了一些方法。目前,我有一个名为success 的AtomicBoolean。在 lambda 表达式中,我调用了success.set(true)。但是,当我记录 success 变量的值时,它仍然是 false 并且似乎没有更新。
基本上,我正在调用一个返回类型为 void 的函数,并且需要知道该函数是否成功。
我做错了什么?
代码如下:
public void createUser(String email, String password) {
AtomicBoolean success = new AtomicBoolean(false);
Amplify.Auth.signUp(
email,
password,
AuthSignUpOptions.builder()
.userAttribute(AuthUserAttributeKey.email(), email)
.build(),
result -> success.set(true),
error -> Log.e("AuthQuickStart", "Sign up failed", error)
);
Log.d("success", String.valueOf(success.get()));
}
【问题讨论】:
-
请向我们展示代码 - 很难找出我们看不到的代码有什么问题。如果您可以将其减少到minimal reproducible example,那就更好了。
-
是的,您的描述没有任何问题,需要代码示例。
-
对不起,我已经更新了代码
-
@Brian16446 你确定回调在你退出方法之前运行了吗?
-
我怀疑
signUp方法是异步的:它立即返回并在另一个线程上运行。因此,当您检查它时,您的布尔值不会被设置。
标签: java android asynchronous aws-lambda aws-amplify