我有一個textView在我的活動 - 比如說,「用戶名」。它應該從Firebase數據庫填充。我正在Asynctask中進行Firebase查詢,以免阻止活動。但是,這意味着在Firebase查詢完全執行之前,TextView會首先加載。將android textview綁定到firebase數據庫字段
那麼在Firebase查詢在AsyncTask內部執行並且知道用戶名後刷新此文本框的最佳方式是什麼? 我不想在數據從數據庫中獲取數據時顯示progresspath並阻止活動。這將在AsyncTask中失敗。
代碼爲的AsyncTask低於中的AsyncTask
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;
}
代碼爲我的火力地堡查詢低於
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;
}
的火力地堡數據庫客戶端使用主線程中的所有網絡互動已經,沒有必要使用一個'AsyncTask'了點。然後它在主線程上調用你的'onDataChange',這樣你就可以更新UI。 –
@ FrankvanPuffelen-嗨,弗蘭克,是的,我理解並早些時候嘗試過,但我不斷收到有關靜態和非靜態變量和方法的問題。此外,該活動的「上下文」在「onDataChange」中不可用。我不想阻止用戶從正在檢索「用戶名」的活動中導航,所以我不想保留上下文或用戶界面元素。但是,如果他在「onDataChange」完成時仍處於該活動狀態,我想刷新適當的UI元素。你認爲最有效的方法是什麼? –