2017-09-10 26 views
0

我使用来自FirebaseDatabase的数据填充recyclerview(不是FirebaseRecyclerView)。要接收的数据很多,都是用户,可以达到数千个。当我收到数据时,应用程序会滞后,然后崩溃。我知道数据太多,所以很难。有没有办法优化这一切?从Firebase获取许多数据时发生崩溃

我有这个errore在logcat的

The application may be doing too much work on its main thread 

我不是非常深刻的印象,所以我寻求帮助的可能的解决方案! 谢谢

recyclerView = (RecyclerView) findViewById(R.id.friend_list2); 
    //recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
    recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); 

    final DatabaseReference mPostReference = FirebaseDatabase.getInstance().getReference().child("user-profile"); 
    mPostReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 



      username = new ArrayList<>(); 
      uid = new ArrayList<String>(); 
      url = new ArrayList<String>(); 

      for (DataSnapshot data : dataSnapshot.getChildren()){ 
       final FriendItem friendItem = data.getValue(FriendItem.class); 
       //final String friendItem2 = data.getKey(); 



       username.add(friendItem); 
       //uid.add(friendItem2); 

       adapter = new FriendHoldAdapter3(getApplicationContext(), username, uid, url); 
       //adapter.setClickListener(FriendActivity3.this); 
       recyclerView.setAdapter(adapter); 

       /** 
       adapter = new FriendHoldAdapter2(FriendActivity2.this, username, uid); 
       adapter.setClickListener(FriendActivity2.this); 
       recyclerView.setAdapter(adapter); 
       **/ 
       final List<FriendItem> filteredModelList = filter(username, "  "); 
       adapter.setFilter(filteredModelList); 


      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     }}); 

回答

1

火力地堡设计做网络调用异步的,但有什么事情发生内部onDataChange调用在主线程上,你的工作与转变的AsyncTask的一些工作线程。

+0

感谢您的回答,我很正确地将Asink Task文档看作是一个新的程序员,并不像使用它。你能管理我的实现吗?非常感谢您 – hulon

+0

@hulon艰难的休息时间,您需要在单独的线程上完成工作,UI主线程用于绘制布局和绑定数据,而不是像您一次所做的工作那样进行排序或过滤。为什么不使用Firebase自己的RecyclerViewAdapter?该适配器会在您滚动并根据需要调用和绑定数据。 –

+0

是的,我知道FirebaseRecyclerView是最好的,但我必须这样做,因为我需要在数据中进行搜索,而使用FirebaseRecyclerView我无法或者更好地限制它。 – hulon

相关问题