java - Java Android - 如何调用 onSuccess 方法
问题描述
我真的是 Java 和 Andoid 的新手,我曾经用 Swift 编写代码。
我目前正在编写注册活动,更准确地说,我正在编写一种在 Cloud Firestore 中添加用户数据的方法。
我迅速编写了类似的代码:
func signupUser(firstname: String, lastname: String, onSuccess: @escaping () -> Void) {
REF_USERS.document(uid).setData([
"firstname": firstname,
// etc..
]) { (err) in
if let err = err {
print("Error adding document: \(err)")
} else {
// THE FUNCTION HERE
onSuccess()
}
}
}
我想在 Android 中使用相同的“onSuccess()”方法,但我不知道该怎么做……
我搜索了但我没有找到任何东西......
这是我没有 onSuccess() 的代码:
public void addNewUser(String firstname, String lastname, String email, Integer gender, String uid, String profileImageUrl){
Map<String, Object> data = new HashMap<>();
data.put("firstname", firstname);
data.put("lastname", lastname);
data.put("email", email);
data.put("gender", gender);
data.put("boxId", "independent");
data.put("notificationsEnabled", true);
data.put("profileImageUrl", profileImageUrl);
mFirebaseFirestore.collection("users").add(data)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error adding document", e);
}
});
}
解决方案
callback
这在 java 中被调用。
首先,您使用所需的功能和输入定义回调接口。
public interface FooOnSuccessListener {
void iWantToPassOutAnInteger(int passItOut);
}
接下来,在您的addNewUser
方法中,将此接口作为输入传递并调用它以传递您的数据
public void addNewUser(String someInput, final FooOnSuccessListener listener){
mFirebaseFirestore.collection("users").add(data).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
listener.iWantToPassOutAnInteger(FromYourFirebase.someInteger);
}
});
}
最后,假设您的addNewUser
方法来自 Foo 类。然后,您可以执行以下操作:
Foo.addNewUser("some param", new FooOnSuccessListener() {
@Override
public void iWantToPassOutAnInteger(int passItOut) {
//Do something with param passItOut
}
});
推荐阅读
- xml - 与 rest api XML 通信,将参数作为具有特定顺序的数组而不是字符串传递
- javascript - 是否可以重载 HTMLInputElement 以提供不同的语言环境?
- cross-domain - 'null' 已被 CORS 政策阻止,有人可以帮我找出问题所在
- r - 团体连续工作日日期(不包括周末和节假日)
- r - 如何根据行中的值重新排列数据框的列
- sql - 如何从更改日志中重建记录
- python - 结合 Asciimatics 和 winsound 的两个函数
- php - 是什么导致标签和 css 代码在 html 中显示为灰色,但如果使用 php 扩展,则可以正常工作?有没有办法解决它?
- angular - Azure 多阶段管道 - npm 安装脚本
- google-apps-script - 广告脚本中的 ScriptApp.newTrigger?