【问题标题】:Java - Android : Wait addlistener result from firebaseJava - Android:等待来自firebase的addlistener结果
【发布时间】:2018-03-25 01:07:10
【问题描述】:

我在 android 上为我的学校做了一个应用程序,但我阻止了异步问题:

databaseReference2.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(final DataSnapshot ds: dataSnapshot.getChildren()){
                Log.e("test","1");
                Menu = ds.getValue(menu.class);
                list2.add(Menu.getId().toString());

                databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        try{
                            Log.e("test","2");
                            if(dataSnapshot.child("menuAjoute").child(mail).exists()){
                                    if(dataSnapshot.child("menuAjoute").child(mail).child(Menu.getId()).getValue().equals(Menu.getId())) {
                                        list.add(Menu.getNom()); 
                                    }
                            }
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });
                Log.e("test","3");
            }

要使我的代码正常工作,第 2 步必须在第 3 步之前。但我还没有找到方法。最简单的方法是什么? (我搜索了解决方案,但都没有奏效)。

【问题讨论】:

    标签: android firebase asynchronous firebase-realtime-database


    【解决方案1】:

    Firebase 侦听器是异步的,这意味着它不会等到数据被提取出来,这意味着它将继续执行以下代码行,并在某个时候从数据库中提取数据。我建议您将第 3 步放在侦听器中

    try{
                                Log.e("test","2");
    
    
        if(dataSnapshot.child("menuAjoute").child(mail).exists()){
                                        if(dataSnapshot.child("menuAjoute").child(mail).child(Menu.getId()).getValue().equals(Menu.getId())) {
                                            list.add(Menu.getNom()); 
                                        }
                                }
                            }catch (Exception e) {
                                e.printStackTrace();
                            }
    
    Log.e("test", "3")
    

    【讨论】:

    • 感谢您的回复!感谢您,我的问题解决了!
    【解决方案2】:

    在 Android 中没有强制等待的好方法。如果您希望第 2 步在第 3 步之前完成,则应将第 2 步移到第 2 步完成时调用的方法中。所以:

    databaseReference2.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(final DataSnapshot ds: dataSnapshot.getChildren()){
                Log.e("test","1");
                Menu = ds.getValue(menu.class);
                list2.add(Menu.getId().toString());
    
                databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        try{
                            Log.e("test","2");
                            if(dataSnapshot.child("menuAjoute").child(mail).exists()){
                                    if(dataSnapshot.child("menuAjoute").child(mail).child(Menu.getId()).getValue().equals(Menu.getId())) {
                                        list.add(Menu.getNom()); 
                                    }
                            }
                            Log.e("test","3");
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        throw databaseError.toException();
                    }
                });
            }
    

    另见:

    【讨论】:

    • 感谢您帮助我。这是一个愚蠢的错误x),但我不会再这样做了。感谢您抽出宝贵时间回复我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2017-06-09
    • 2021-04-22
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多