繁体   English   中英

Firebase ValueEventListener完全不触发

[英]Firebase ValueEventListener not firing at all

我只是试图触发此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) {

            }
        });

    }
}

更新:这是数据库的结构: 在此处输入图片说明

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

    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();

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

DatabaseReference d = FirebaseDatabase.getInstance().getReference("privateChat/WiseNN/tellMeWhen2Go/messages/");
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) {

    }
});

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

我认为这是由于某种Firebase故障造成的。 当我登录Google控制台时,我知道实际上存在一个数据库,但我发现我没有数据库(数据库中没有任何内容)。 但是,这对于为什么不触发回调函数是有道理的。

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

在那之后,我回到了最初使用的主应用程序,并使用与之前相同的代码调用了Firebase……并且工作了。 我知道这听起来似乎不合理,但这实际上就是刚刚发生的事情。

您错过了.child(“ messages”);

DatabaseReference DBRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference DBMsgsRef = DBRef.child("privateChat").child(senderUsername).child(recipeintUsername).child("messages").child(messagesKey).getRef();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM