bra*_*ker 5 java android arraylist firebase firebase-realtime-database
我在我的应用程序中使用Firebase的实时数据库功能.数据库看起来像这样:
节点104,1040 ......具有其他元件/数据.我正在获取此数据,并按每个Integer父级中可用的节点'updatedAt'的值对其进行排序,如snap中所示.我onChildAddedListener()用来获取最后20个元素."结果"中有大约1050个节点.
问题:
即使在高速WiFi上,获取数据也需要30秒左右的时间.
Firebase是否允许任何回调通知已提取数据?我想将每个自定义对象附加ArrayList到从Firebase收到的对象,并通过意图将其传递给另一个活动.我正在计算收到的对象,当它变为20时,我打开了我的活动.这是唯一的方法吗?如果有更好的出路,请建议.
这是我的代码:
public class Splash extends AppCompatActivity{
private static final String TAG = "Splash Activity";
private ArrayList<News> NewsArrayList = new ArrayList<>();
private DatabaseReference newsReference;
private int position = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
newsReference = FirebaseDatabase.getInstance().getReference().child("results");
Query queryNewsReference = newsReference.orderByChild("updatedAt").limitToLast(20);
fetchNews(queryNewsReference);
}
private void fetchNews(Query queryNewsReference) {
queryNewsReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());
News newsObject = dataSnapshot.getValue(News.class);
Log.d(TAG,"News Title: "+ newsObject.getVideo_title());
NewsArrayList.add(newsObject);
position++;
if(position == 20){
startMainActivity();
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s){
Log.d(TAG, "onChildChanged() called on key: "+ dataSnapshot.getKey());
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.d(TAG, "onChildRemoved() called on key: "+ dataSnapshot.getKey());
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.d(TAG, "onChildMoved() called on key: "+ dataSnapshot.getKey());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG,"Database Error: "+databaseError.toString());
}
});
}
private void startMainActivity() {
Intent intent = new Intent(Splash.this,MainActivity.class);
intent.putExtra("NewsList",NewsArrayList);
Splash.this.startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
在添加值侦听器之前尝试重新连接到 firebase:
private void fetchNews(Query queryNewsReference)
{
if (FirebaseDatabase.getInstance() != null)
{
FirebaseDatabase.getInstance().goOffline();
}
FirebaseDatabase.getInstance().goOnline();
queryNewsReference.addChildEventListener(new ChildEventListener() {
...
}
Run Code Online (Sandbox Code Playgroud)