Ich habe eine TextView in meiner Aktivität - sagen wir, "Benutzername". Es soll von einer Firebase-Datenbank gefüllt werden. Ich mache die Firebase-Abfrage in Asynctask, um die Aktivität nicht zu blockieren. Das bedeutet jedoch, dass TextView zuerst geladen wird, bevor die Firebase-Abfrage vollständig ausgeführt wird.Androide Textansicht zu Firebase Datenbankfeld
Also, was ist der beste Weg, diese TextBox zu aktualisieren, nachdem die Firebase-Abfrage innerhalb der AsyncTask ausgeführt wird und der Benutzername bekannt wird? Ich möchte ProgressBar nicht anzeigen und die Aktivität blockieren, während die Daten aus der Datenbank abgerufen werden. Das würde den Zweck, es in AsyncTask zu tun, vereiteln.
-Code für die AsyncTask unten ist
private class CheckUserLoginAndRetrieveDataFromFirebase extends AsyncTask <Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... voids) {
if (thisAppUser!=null) {
setUserDataForToday();
if (createNewNode) { //This is the first time the User is logging in
createUsersNodesForFirstTime();
}
}
return null;
}
-Code für meine Firebase Abfrage im AsyncTask unter
public static void setUserDataForToday() {
setProperDatabaseReference(); //This sets reference to user specific nodes in the database
myRef.child("dashboard").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Dashboard dashboard = dataSnapshot.getValue(Dashboard.class);
if (dataSnapshot.getChildrenCount() > 0) {
createNewNode = false;
if (dashboard.checkIfTodaysDateExistsInDatabase()) {
//An entry for todays date exists in database, so no data change needed
myDashboard = dashboard;
}
Die Firebase Datenbank-Client bereits alle Netzwerk-Interaktion ausgeführt wird, besteht keine Notwendigkeit, eine 'AsyncTask' dafür zu verwenden. Anschließend ruft es Ihren 'onDataChange' im Hauptthread auf, sodass Sie die Benutzeroberfläche aktualisieren können. –
@ FrankvanPuffelen- Hallo Frank, ja, ich verstehe und versuchte es früher, aber ich bekomme immer wieder Probleme mit statischen und nicht statischen Variablen und Methoden. Auch der "Kontext" der Aktivität ist in "onDataChange" nicht verfügbar. Ich möchte den Benutzer nicht davon abhalten, sich von der Aktivität, die den Benutzernamen abruft, weg zu bewegen, damit ich den Kontext oder die UI-Elemente nicht behalten möchte. Aber für den Fall, dass er noch aktiv ist, wenn der "onDataChange" beendet ist, möchte ich das entsprechende UI-Element aktualisieren. Was würden Sie am effizientesten dafür vorschlagen? –