場所に基づいてキーを取得するためにfirebase geofireライブラリを使用していますが、キーを取得してfirebaseを参照し、オブジェクトを取得してリストビューに設定する必要があるたびに、何千ものキーが onKeyEntered() イベントに返されるため、非常に遅くなります。onKeyEntered() で他のすべての作業にコメントしてみて、ジオファイアの速さを確認しましたが、900 ミリのすべてのコールバックが受信されたことに驚きました。
onKeyEntered() コールバックで渡されたキーを使用してfirebaseからデータを取得し、リストビューに設定して、何千ものエントリでもリストビューが高速にロードされるようにするための最適化された最適な方法は何ですか
私はすべてのコールバックで AsyncTask を考え、データの取得作業を AsyncTask に渡し、次のコールバック キーに進み、同じことを行いましたが、それが正しいかどうかはわかりません。
または、ほんの少しだけロードしてからスクロールとしてロードすることも良い考えですが、ジオファイアはデータベース全体からキーを返すため、最新のものをいくつか取得するオプションがないため、実装方法がわかりません。
これは私が試していることですが、リスト ビューの読み込みが非常に遅くなります。
@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();
}
});
}