[英]Firebase returns wrong values when addValueEventListener called
[英]Firebase “addValueEventListener” being called even if offline
我制作了當前城市金屬費率的應用程序。 我會每隔幾個小時更新一次金屬費率。 我有一個TextView,當且僅當新的費率被更新時,它才使用當前時間和日期進行更新(由我在控制台中進行)。 現在,問題是,即使應用程序處於脫機狀態,我的TextView也會更新為當前時間。這意味着addValueEventListener處於活動狀態並且正在偵聽。 如果應用程序處於脫機狀態,除非我手動更新,否則我不希望TextView被更新。 這是我的代碼-
mFirebaseDatabaseInstance.getReference("metals").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String ratesteel= dataSnapshot.getValue(String.class);
tvsteelrate.setText(ratesteel);
//getting notification of updated price
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(MainActivity.this)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher))
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("ST")
.setContentText("Updated")
.setAutoCancel(true);
.setSound(defaultSoundUri);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(count, notificationBuilder.build());
count++;
Date c = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);
mydate.setText(formattedDate);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e(TAG, "Failed to read app title value.", error.toException());
}
});
}
如果應用離線或未更新,如何禁用TextView?
如果要讓代碼僅在調用時執行,請使用.addListenerForSingleValueEvent()
mFirebaseDatabaseInstance.getReference("metals").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// do your stuff here
}
@Override
public void onCancelled(DatabaseError databaseError) {
// handle error
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.