我正在使用firebase geofire库来获取基于位置的键,但是因为每次我必须使用键引用firebase并返回对象并将其设置为listview变得非常时,onKeyEntered()事件中会返回数千个键慢。我尝试评论onKeyEntered()中的所有其他工作,看看geofire有多快,然后我惊讶地收到了900毫的所有回调。
那么现在使用onKeyEntered()回调中传递的密钥从firebase获取数据的最佳优化方法是什么,并将其设置为listview,以便即使对于数千个条目,listview应该加载 < / p>
我想到每次回调中的AsyncTask都会将提取数据用于AsyncTask并继续执行下一个回调键并执行相同操作,但不确定是否正确。
或只加载少量然后加载滚动也是个好主意,但是geofire从整个数据库返回键,所以没有选项只能获得最新的一个,所以不知道如何实现它。
这就是我正在尝试但列表视图加载非常慢。
@Override
public void onKeyEntered(String key, GeoLocation location) {
Log.d("geoevent", key);
mDatabaseTemp = FirebaseDatabase.getInstance().getReference("/posts/" + key);
mDatabaseTemp.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Post post = new Post();
post = dataSnapshot.getValue(Post.class);
mPosts.add(post);
mPostAdapter.notifyDataSetChanged();
mRecycler.smoothScrollToPosition(mPosts.size() - 1);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(getActivity(), "error" + databaseError, Toast.LENGTH_LONG).show();
}
});
}
答案 0 :(得分:1)
类型问题&#34;如何最好&#34;众所周知很难回答。但是,我会提供一些您可能不了解的系统的一般行为提示。
AsyncTask
之后才有用。