android - Android序列(跳过方法)
问题描述
我在理解关于调用函数的 android 代码有什么问题时遇到了一些问题
如下图所示,我有 2 个私人 void
cekSaved(place.getName());
addUserInfo(place.getName(),"");
我希望 android 先运行 ceksaved 方法然后 addUserInfo 但 android 先运行 adduser 然后运行 ceksaved 函数
我需要帮助理解这一点
代码是:
private void cekSaved(String param1){
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference newUserInfo = db.collection("trip").document();
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
db.collection("trip")
.whereEqualTo("user_id", userID )
.whereEqualTo("city", param1)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful())
{
for (QueryDocumentSnapshot document : task.getResult()) {
status = "ada";
Log.i(TAG, "onComplete: "+status);
}
}
else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
private void addUserInfo(String city, String tittle){
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference newUserInfo = db.collection("trip").document();
place_id = newUserInfo.getId();
Log.i(TAG, "addUserInfo: "+status);
if(!status.equals("ada")) {
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
userTrip usertrip = new userTrip();
usertrip.setCity(city);
usertrip.setTittle("My Trip To " + city);
usertrip.setTrip_id(newUserInfo.getId());
usertrip.setUser_id(userID);
Log.i(TAG, "addUserInfo: trip baru telah di buat");
newUserInfo.set(usertrip).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
ToastMessage("OK");
} else {
ToastMessage("fail to register");
}
}
});
}else{ToastMessage("sudah ada");}
}
解决方案
您从 Firebase 获取值,这是一个异步调用,因此您并不真正知道哪个会先完成。您可以看到任何一个调用都有一个 onCompleteListener,如果您想在cekSaved之后运行addUserInfo ,您必须在 cekSaved 方法的 onCompleteListener 中调用 addUserInfo。
推荐阅读
- flutter - Flutter Web:image_picker 插件从文件夹而不是网络摄像头获取图像
- java - 如何在 JavaFX 中制作渐变进度条?
- cuda - cudaMemcpy 将 rgb 问题转换为灰度
- git - git 如何更改我所做的一切的默认分支?
- objective-c - 将鼠标悬停在 NSMenu/NSMenuItem 上时填充子菜单?
- android - 最有效的 ViewModel 策略是什么?
- haskell - 无法在 do 块中重构代码,IO 返回类型不匹配
- html - 从右到左无限滚动css,React
- python - (Python, Selenium Chromedriver) 循环遍历 txt 文件中的多个 url 以验证实时网页上的每个脚本标签
- docker - Docker 未按预期使用 EC2 ECR 构建映像