簡體   English   中英

Firebase“ addValueEventListener”即使處於脫機狀態也被調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM