如何再次从 firebase 数据库中请求数据?
How to ask data from firebase database again?
我的应用程序具有 Swipe-To-Refresh 布局。
当您在滑动刷新布局中向上滚动时,数据会从 Internet 刷新。 (对于那些不知道的人)
我的数据源是 Firebase。
在我的应用程序中,如果用户未连接,则会显示网络错误消息,然后在打开互联网后,它不会获取数据。
你如何从我的数据库中再次获取数据。
代码如下:
protected void onCreate(Bundle savedInstanceState) {
...
mFirebaseDatabase = FirebaseDatabase.getInstance();
// my database
mNewsDatabaseReference = LoginActivity.mFirebaseDatabase.getReference()
.child("data").child("news");
// my database reference
// my ChildEventListener
mNewsChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// my data
News news = dataSnapshot.getValue(News.class);
// add the news to the top of my ArrayAdapter
myAdapter.insert(news, 0);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
// my OnRefreshListener
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// what Should I do in here to request the data again?!
// I know that I should empty my adapter first then request the data
myAdapter.clear();
}
}
);
}
使用firebase时realtime-database,无需再次请求。一旦数据发生变化,它会自动为您获取数据,并且您的一位监听器将被调用。
您的 onChildChanged() 事件将在任何时候 news
子节点被修改时触发,包括对子节点后代的任何修改。
要启用离线功能不要忘记使用setPersistenceEnabled(true)
查看 documentation 了解更多信息
上面的回答最有帮助,但是对于如何再次请求数据的问题?!
您只需再附加一次监听器即可。
但请记住先分离旧的侦听器,这样数据就不会在适配器中出现两次。
代码如下:
mNewsSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
myAdapter.clear();
mNewsDatabaseReference.removeEventListener(mNewsChildEventListener);
mNewsDatabaseReference.addChildEventListener(mNewsChildEventListener);
}
});
我的应用程序具有 Swipe-To-Refresh 布局。
当您在滑动刷新布局中向上滚动时,数据会从 Internet 刷新。 (对于那些不知道的人)
我的数据源是 Firebase。
在我的应用程序中,如果用户未连接,则会显示网络错误消息,然后在打开互联网后,它不会获取数据。
你如何从我的数据库中再次获取数据。
代码如下:
protected void onCreate(Bundle savedInstanceState) {
...
mFirebaseDatabase = FirebaseDatabase.getInstance();
// my database
mNewsDatabaseReference = LoginActivity.mFirebaseDatabase.getReference()
.child("data").child("news");
// my database reference
// my ChildEventListener
mNewsChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// my data
News news = dataSnapshot.getValue(News.class);
// add the news to the top of my ArrayAdapter
myAdapter.insert(news, 0);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
// my OnRefreshListener
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// what Should I do in here to request the data again?!
// I know that I should empty my adapter first then request the data
myAdapter.clear();
}
}
);
}
使用firebase时realtime-database,无需再次请求。一旦数据发生变化,它会自动为您获取数据,并且您的一位监听器将被调用。
您的 onChildChanged() 事件将在任何时候 news
子节点被修改时触发,包括对子节点后代的任何修改。
要启用离线功能不要忘记使用setPersistenceEnabled(true)
查看 documentation 了解更多信息
上面的回答最有帮助,但是对于如何再次请求数据的问题?!
您只需再附加一次监听器即可。
但请记住先分离旧的侦听器,这样数据就不会在适配器中出现两次。
代码如下:
mNewsSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
myAdapter.clear();
mNewsDatabaseReference.removeEventListener(mNewsChildEventListener);
mNewsDatabaseReference.addChildEventListener(mNewsChildEventListener);
}
});