So füllen Sie Android ListView mit Informationen aus der Firebase-Abfrage
Dies ist mein erster Beitrag. Wenn ich also ein bestimmtes Protokoll nicht befolgt habe, entschuldige ich mich.
Ich versuche, eine ListView mit Informationen aus meiner Firebase-Datenbank zu füllen. Ich denke, das Problem, das ich habe, ist, dass die Abfrage an die Datenbank zu langsam ist (der Thread lädt wahrscheinlich Bilder herunter) und meine Aktivität das Aktivitätslayout lädt, ohne darauf zu warten, dass der Thread die Ausführung beendet. (Wenn ich durch den Debugger gehe und etwas warte, werden mir irgendwann die Informationen angezeigt, die ich analysiere: Benutzernamen, Benutzernummern und Benutzerbilder.) Alles, was ich abgefragt habe, legt nahe, dass ich AsyncTask verwenden sollte, um dies zu erreichen. Im Gegensatz zur Verwendung von Thread-Blocking oder Semaphor-B / C ist AsyncTask thread-sicher.
ach meinem Verständnis werden Firebase-Abfragen bereits asynchron ausgeführt. Aus diesem Grund scheint die Methode doInBackground für AsyncTask, die ich "versucht" habe, überflüssig zu sein. Außerdem bin ich etwas verwirrt über die überladene Signatur von AsyncTask und den Aufruf von: new someTask.execute ("some stuff in a string").
Vorschläge, wie ich das erreichen kann? Jedes Feedback wird sehr geschätzt!
// Bitte ignorieren Sie die kleinen Einrückungen, die beim Einfügen meines Codes in @ auftrete
protected void onCreate(Bundle savedInstanceState) {
...
new getFirebaseInfoTask();
}
private class getFirebaseInfoTask extends AsyncTask {
@Override
protected Object doInBackground(Object... args) {
// Do stuff
userInfoList = GetUserInfoFromFirebase.getUserInfo();
// Unsure if I need to return here.
return userInfoList;
}
@Override
protected void onProgressUpdate(Object... args) {
// Update your UI here
populateUserInfoList();
}
}
private void populateUserInfoList() {
// Create list of items
Collections.addAll(userInfoList);
populateFriendsListView();
}
private void populateFriendsListView() {
// Build the adapter
ArrayAdapter<UserInfo> adapter = new MyListAdapter();
// Configure the list view
ListView listView = (ListView) findViewById(R.id.friends_listview);
listView.setAdapter(adapter);
registerClickCallBack();
}
... // More code
public class GetUserInfoFromFirebase {
public static ArrayList getUserInfo() {
final ArrayList<UserInfo> list = new ArrayList<UserInfo>();
Firebase firebase = new Firebase("https:......firebaseio.com");
firebase.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
HashMap<String, Object> users = (HashMap<String, Object>) snapshot.getValue();
for(Object user : users.values()) {
HashMap<String, Object> userMap = (HashMap<String, Object>) user;
String userNumber = (String) userMap.remove("number");
if(!list.contains(userNumber)) {
String name = (String) userMap.remove("username");
String pic = (String) userMap.remove("profile_picture");
UserInfo info = new UserInfo(userNumber, name, pic);
list.add(info);
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {}
});
return list;
}