我正在Android studio中开发一个新的应用程序。我使用setvalue将我的数据保存到Firebase数据库,没有任何问题。但是,当我尝试从Firebase检索数据时,将addValueEventListener附加到根引用,如下所示,即使OnDataChange()
未被调用也未调用onCancelled()
。
我会错过任何有用的建议。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue()); }
@Override
public void onCancelled(DatabaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());}
});
我的疑问是在调试我的程序时,控件必须进入onDataChange()或onCancelled()。但事实并非如此。我在onDataChange()和onCancelled()fm中的断言处放置了System.out.println语法的断点,但控件并没有停在那里。
答案 0 :(得分:0)
你读过文档吗?
重要事项:每次数据都会调用onDataChange()方法 在指定的数据库引用处更改,包括对其的更改 儿童。要限制快照的大小,请仅在附件处附加 观看变化所需的最高级别。例如,附加一个 建议不要监听数据库的根目录。
https://firebase.google.com/docs/database/android/retrieve-data
我认为这是问题的原因
其他一切看起来很好,除了System.out
,我不确定它是否会起作用,android拥有它自己的日志工具。试试Log.e
答案 1 :(得分:0)
试试这个
mDatabase.child("your table name here").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue()); }
@Override
public void onCancelled(DatabaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());}
});
答案 2 :(得分:0)
试试这个。如果这次成功,请告诉我
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(dataSnapshot.getValue().toString()); }
@Override
public void onCancelled(DatabaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());}
});
答案 3 :(得分:-1)
解决
我尝试创建新项目,保存和检索Firebase数据库中的数据没有任何问题。
然后我发现我遇到问题的项目是我从传统的firebase.com控制台导入的。我删除了应用级构建gradle中的以下行,根据新的Firebase文档弃用了该行,然后它运行良好。
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
希望它对别人有所帮助。