首页 > 解决方案 > 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");}

    }

标签: android

解决方案


您从 Firebase 获取值,这是一个异步调用,因此您并不真正知道哪个会先完成。您可以看到任何一个调用都有一个 onCompleteListener,如果您想在cekSaved之后运行addUserInfo ,您必须在 cekSaved 方法的 onCompleteListener 中调用 addUserInfo。


推荐阅读