Firebase ValueEventListener根本没有触发

问题描述 投票:0回答:4

我只是试图触发这个Firebase ValueEventListener。我在侦听器内部设置了断点,以检查它们是否正在发射,而它们不是。我不确定为什么它不起作用,因为一切对我来说都很好。是否有任何与Firebase相关的原因此应用程序无法正常工作?

package sampleproj.wisen.android.sampleproj;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatabaseReference d = FirebaseDatabase.getInstance().getReference();
        d.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                int r = 0;
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

更新:这是数据库的结构:enter image description here

我已经尝试在最深的子级别访问数据库。关键是要检索两个用户之间的消息列表。

    final String senderUsername = "WiseNN";
    final String recipeintUsername = "tellMeWhen2Go";
    final String messagesKey = "messages";
    DatabaseReference DBRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference DBMsgsRef = DBRef.child("privateChat").child(senderUsername).child(recipeintUsername).child(messagesKey).getRef();
android firebase android-studio firebase-realtime-database
4个回答
1
投票

尝试将"privateChat/WiseNN/tellMeWhen2Go/messages/"作为数据库引用放在getReference()方法中。

DatabaseReference d = FirebaseDatabase.getInstance().getReference("privateChat/WiseNN/tellMeWhen2Go/messages/");

0
投票
String data, message;
DatabaseReference d = FirebaseDatabase.getInstance().getReference("privateChat").child("WiseNN").child("tellMeWhen2Go").child("messages");
d.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            data = ds.child("data").getValue().toString();
            message = ds.child("message").getValue().toString();
            // similarly for sender & time

        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

0
投票

我正在写自己的答案,正如我刚才想到的那样。

我认为这是由于某种Firebase故障造成的。当我登录我的谷歌控制台时,我看到我没有数据库(其中没有任何内容),当我知道其实存在时。但是,这对于回调函数未触发的原因是有意义的。

奇怪的是,我从GitHub克隆了一个新的示例firebase安卓应用程序,在谷歌控制台中将其添加到我的Firebase应用程序,然后将新对象写入实时数据库(来自新的Android应用程序示例)。完成此操作后,我的整个firebase数据库结构再次出现。

之后,我回到了我最初工作的主应用程序,并使用之前存在的完全相同的代码调用firebase ...并且它有效。我知道这可能听起来不合理,但这实际上就是刚刚发生的事情。


0
投票

你错过了.child(“短信”);

DatabaseReference DBRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference DBMsgsRef = DBRef.child("privateChat").child(senderUsername).child(recipeintUsername).child("messages").child(messagesKey).getRef();
© www.soinside.com 2019 - 2024. All rights reserved.