Ich benutze Firebase Geofire-Bibliothek, um Schlüssel basierend auf Ort zu holen, sondern wegen der Tausende von Schlüsseln zurückgegeben werden onKeyEntered() -Ereignis jedes Mal muss ich den Schlüssel beziehen Firebase und hole das Objekt zurück und setze es auf listview, das sehr langsam wird. Ich habe versucht, alle anderen Arbeiten in onKeyEntered() kommentieren, um zu sehen, wie schnell Geofire ist dann war ich überrascht mit 900 Milli's alle Rückrufe erhalten.Firebase android Wie bekomme ich Daten von der Liste der Schlüssel auf einmal
So, jetzt, was die beste optimierte Art und Weise ist es, die Daten von Feuerbasis mit dem Schlüssel übergeben onKeyEntered() Rückruf und setzen Sie ihn auf Listenansicht, so dass auch für Tausende von Einträgen Listenansicht erhalten sollte schnell
I load Denken Sie bei jedem Callback an AsyncTask, geben Sie die fetchenden Daten an AsyncTask weiter und fahren Sie mit dem nächsten Callback-Schlüssel fort. Tun Sie dies, aber nicht sicher, ob das richtig ist.
Oder laden Sie nur ein paar und laden Sie dann als Scroll ist auch eine gute Idee, aber geofire gibt Schlüssel aus der ganzen Datenbank, so gibt es keine Option, nur ein paar neueste zu bekommen, so nicht sicher, wie Sie es implementieren.
Dies ist, was ich versuche, aber Listenansicht lädt sehr langsam.
@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();
}
});
}
Ich schrieb ein paar Hinweise unten, aber im Allgemeinen ist diese Frage zu breit. Bitte beschränke dich auf eine einzelne Frage, z. "Warum kommen die Gegenstände schneller zurück als ich erwartet habe?" (Dies liegt daran, dass [die Anfragen weitergeleitet werden] (http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-) -obse/35932786 # 35932786) übrigens). –