Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法触发了两次,但调用了一次Firebase请求_Java_Android_Firebase_Google Cloud Firestore_Android Lifecycle - Fatal编程技术网

Java 方法触发了两次,但调用了一次Firebase请求

Java 方法触发了两次,但调用了一次Firebase请求,java,android,firebase,google-cloud-firestore,android-lifecycle,Java,Android,Firebase,Google Cloud Firestore,Android Lifecycle,我正在为我的学习开发一个社交应用程序,我必须使用Firebase firestore来储存一些关于我的应用程序的信息 我的问题很简单,但我不明白我为什么会有这个问题。 当用户创建活动时,也会创建聊天和欢迎消息。 但是我的方法(也就是我的firebase请求)被调用了两次 private void createAct(SharedActivity SharedAct) { ActivityHelper.createActivities(SharedAct.getId(), SharedAc

我正在为我的学习开发一个社交应用程序,我必须使用Firebase firestore来储存一些关于我的应用程序的信息

我的问题很简单,但我不明白我为什么会有这个问题。 当用户创建活动时,也会创建聊天和欢迎消息。 但是我的方法(也就是我的firebase请求)被调用了两次

private void createAct(SharedActivity SharedAct) {
    ActivityHelper.createActivities(SharedAct.getId(), SharedAct.getTitle(), SharedAct.getDescription(), SharedAct.getAdress(), SharedAct.getDate(), SharedAct.getPicture(), SharedAct.getMaxPartner(), SharedAct.getType(), SharedAct.getUserId()).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            createWelcomeMess(SharedAct);
        }
    });

}

/**
 * To generate a new message in the  new activity
 * To launch the discussion in the activity
 */
private void createWelcomeMess(SharedActivity activityCreated) {
    if (!activityAlreadyCreated){
        MessageHelper.createMessageForChat("Bienvenue dans le chat de discussion", activityCreated.getId(), user).addOnSuccessListener(documentReference -> {
            Toast.makeText(getActivity(), "Votre Activité est bien crée", Toast.LENGTH_SHORT).show();
            Log.i(TAG, "onSuccess: message created");
            activityAlreadyCreated = true;
            new Handler().postDelayed(() -> {
                MainDashBoardFragment fragment = new MainDashBoardFragment();
                Bundle bundle = new Bundle();
                bundle.putString("id", ID);
                fragment.setArguments(bundle);
                getParentFragmentManager().beginTransaction().add(R.id.main_frame_layout, fragment).addToBackStack("frag").commit();
            }, 1000);
        });

    }

你能试试快照侦听器吗。正如文件所说,它只会触发一次。在实时数据库中,我也遇到了同样的问题。我将常规侦听器切换为singleEventListener,它将启动仅触发一个。因此,我们假设它与singleEventListener等价,但与Firestore不同。我尽量避免使用firestore,因为每次读/写/更新都会收取很多费用,这就是为什么我只在firestore中保存用户数据的原因,这些数据是通用的,但其余信息是实时的

下面是代码示例

query.addSnapshotListener(
    new EventListener<QuerySnapshot>() {
        // ...
    });
query.addSnapshotListener(
新的EventListener(){
// ...
});

在这里,您可以找到一个关于如何创建一个完整且功能强大的应用程序的教程。除此之外,您如何知道该方法是否被调用了两次?为什么说只调用一次?我的欢迎信息在firebase@AlexMamo中创建了两次。我会检查这个教程,但我的聊天是确定的。其他一切都很完美。
query.addSnapshotListener(
    new EventListener<QuerySnapshot>() {
        // ...
    });