Android Firebase ValueEventListener根本不启动
我只是想点燃这个Firebase ValueEventListener。我在监听器内部设置了断点,以检查它们是否正在发射,而不是。我不知道为什么它不起作用,因为我觉得一切都很好。是否有任何与Firebase相关的原因导致此应用程序无法工作Android Firebase ValueEventListener根本不启动,android,firebase,android-studio,firebase-realtime-database,Android,Firebase,Android Studio,Firebase Realtime Database,我只是想点燃这个Firebase ValueEventListener。我在监听器内部设置了断点,以检查它们是否正在发射,而不是。我不知道为什么它不起作用,因为我觉得一切都很好。是否有任何与Firebase相关的原因导致此应用程序无法工作 package sampleproj.wisen.android.sampleproj; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatAc
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();
尝试将privateChat/WiseNN/tellmewwhen2go/messages/作为getReference方法中的DB引用
DatabaseReference d = FirebaseDatabase.getInstance().getReference("privateChat/WiseNN/tellMeWhen2Go/messages/");
我正在写我自己的答案,因为我刚刚找到了答案
我认为这是由于某种火基故障造成的。当我登录我的谷歌控制台时,我看到我没有数据库,里面什么都没有,而我知道事实上有一个数据库。然而,这对于回调函数为什么没有启动是有意义的
奇怪的是,我从GitHub克隆了一个新的示例firebase android应用程序,将其添加到我在谷歌控制台的firebase应用程序中,然后从新的示例android应用程序向实时数据库写入一个新对象。完成此操作后,我的整个firebase数据库结构完全重新出现
在那之后,我回到了我最初开发的主应用程序,并使用与之前完全相同的代码调用了firebase…它成功了。我知道这听起来可能不太合理,但这确实是刚刚发生的事情。你错过了
DatabaseReference DBRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference DBMsgsRef = DBRef.child("privateChat").child(senderUsername).child(recipeintUsername).child("messages").child(messagesKey).getRef();
共享您的数据库结构。我已上载要检索的文档的databasePost扩展结构的结构。已发布更新的数据库结构1。你的航海日志有错误吗?2.更改数据库引用DBMsgsRef=DBRef.childprivateChat.childsenderUsername.ChildRecipientUserName.childmessagesKey.getRef;到数据库引用DBMsgsRef=DBRef.childprivateChat.childsenderUsername.childRecipientUserName.childmessagesKey;3.检查您的数据库规则我已经尝试过:/privateChat,privateChat&privateChat/。这些似乎都不起作用。我可以知道privateChat中的数据是什么吗?要检索两个用户之间的消息列表,我认为您需要考虑数据结构的设计,因为Firebase对查询功能有限制。不确定为什么会对其进行升级…这与问题无关。这是误导。我希望这能解决你的问题。所以,接受答案并投票表决,这样对其他人也会有用。这和我上面的代码完全相同。但是,我已经复制/粘贴了您的代码并尝试运行它。它不起作用。我知道代码没有问题,有没有其他原因让听者不开火。可能与android studio版本或firebase配置有关?另一个原因可能是firebase规则。有关firebase规则,请参阅。我发现了它,它不是我之前所说的代码。我认为这是由于某种火基故障造成的。我以前使用过相同的代码调用firebase,没有任何问题。它只是突然停止了工作。我自己写了答案,因为没有一个答案对我有效。
DatabaseReference DBRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference DBMsgsRef = DBRef.child("privateChat").child(senderUsername).child(recipeintUsername).child("messages").child(messagesKey).getRef();