0
我正在嘗試使用來自Firebase的詳細信息填充我的活動。我希望首先打開該活動,然後在微調自動填充之前獲取細節時,微調器會顯示該活動。現在發生的事情就像它試圖在打開頁面之前加載活動細節,從而導致UI滯後。這就是我下面讓我的活動等到活動細節獲得
碼這是在做上創建
waitForDetails();
ObscuredSharedPreferences mySubscription = ObscuredSharedPreferences.getPrefs(getApplicationContext(), "MySubscription", MODE_PRIVATE);
final ObscuredSharedPreferences.Editor editorSub = mySubscription.edit();
String end = mySubscription.getString("EndSub", null);
String last = mySubscription.getString("LastSub", null);
endSubView.setText(end);
lastSubView.setText(last);
subDiffView.setText(dateConvert()+" "+getString(R.string.days_manage));
subDiffView.setGravity(Gravity.CENTER);
spin.setVisibility(View.GONE);
layout.setVisibility(View.VISIBLE);
這是waitForDetails方法
private void waitForDetails(){
final Handler handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
ObscuredSharedPreferences pref = ObscuredSharedPreferences.getPrefs(getApplicationContext(), "MyPref", MODE_PRIVATE);
final ObscuredSharedPreferences.Editor editor = pref.edit();
final String userName = pref.getString("Username", null);
ObscuredSharedPreferences mySubscription = ObscuredSharedPreferences.getPrefs(getApplicationContext(), "MySubscription", MODE_PRIVATE);
final ObscuredSharedPreferences.Editor editorSub = mySubscription.edit();
editorSub.clear();
editorSub.apply();
Firebase ref = new Firebase(Config.FIREBASE_URL);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
User user = snapshot.child(userName).getValue(User.class);
String endSub = user.getEndSubscription();
String lastSub = user.getLastSubscription();
editorSub.clear();
editorSub.apply();
editorSub.putString("EndSub", endSub);
editorSub.putString("LastSub", lastSub);
editorSub.apply();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(r, 1000);
}
時遇到了爲Am在sharedprefrence節省一些價值觀的問題,價值觀從火力得到現在它不等待得到我的值,然後在共享首選項中首先保存它,然後再執行 – Henry
'waitForDetails.execute();'應該是最後一條語句,並且共享首選項中的數據保存代碼在'onPostExecute()'方法中移動。意味着你在'waitForDetails.execute();'在'onPostExecute()'中移動後使用的代碼。 – user392117