在onMessageReceived()中执行操作-Firebase Cloud Messaging

时间:2019-01-29 08:53:42

标签: java firebase firebase-cloud-messaging

在尝试监听onMessageReceived()中的有效负载后尝试执行操作,我要实现的操作在其方法中具有 ProgressBar ,因此,它引发了空指针异常。 / p>

下面是我的方法onMessageReceived()

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        if (remoteMessage.getNotification() != null) {
            Handler handler = new Handler(Looper.getMainLooper());
            handler.post(new Runnable() {
                public void run() {
                    roomAvailabilityHelper = new RoomAvailabilityHelper("");
                    roomAvailabilityHelper.endCurrentMeeting(new RoomAvailabilityActivity());
                    roomAvailabilityHelper.autoRefreshTimer(new RoomAvailabilityActivity());
                    Toast.makeText(getApplicationContext(),
                            "Am working", Toast.LENGTH_SHORT).show();
                    Log.d("Updated ->","Calendar updated");
                }
            });
        }
    }

然后,autoRefreshTimer()endCurrentMeeting()在RoomAvailabilityHelper`类中可用。下面是方法。

 public static void endCurrentMeeting(RoomAvailabilityActivity activity) {
            activity.progressBar.setVisibility(VISIBLE);
            RoomAvailabilityHelper.updateRoomCalendarEvents(activity.mDisposables,
                    false, activity, 2000);
            activity.runOnUiThread(() -> new Handler().postDelayed(() -> {
                MeetingRoomDetailFragment meetingRoomDetailFragment = (MeetingRoomDetailFragment)
                        activity.getSupportFragmentManager()
                                .findFragmentById(R.id.frame_room_availability_details);
                if (meetingRoomDetailFragment != null && activity.sharedPreferences.getString(
                        CountryActivity.SHARED_ROOM_CHECKED_IN, null) == null) {
                    meetingRoomDetailFragment.displayCheckInScreen();
                }
                activity.progressBar.setVisibility(View.GONE);
            }, 3000));
        }


    public static void autoRefreshTimer(RoomAvailabilityActivity activity) {
            final int timedPeriod = 300000;
            final Handler handler = new Handler();
            handler.postDelayed(() -> {
                endCurrentMeeting(activity);
                autoRefreshTimer(activity);
            }, timedPeriod);
        }

以下是错误提示:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setVisibility(int)' on a null object reference
        at com.andela.mrm.room_availability.RoomAvailabilityHelper.endCurrentMeeting(RoomAvailabilityHelper.java:280)
        at com.andela.mrm.notifications.Notifications$1.run(Notifications.java:40)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6939)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)

因此我正在寻找一种在onMessageReceived()中连接活动的方法,但我无法理解。这就是为什么由于 Activity

而在 ProgressBar 上获得空指针异常的原因。

1 个答案:

答案 0 :(得分:1)

我建议使用LocalBroadcastManager。因此,当您在Firebase服务文件的onMessageReceived()中收到事件时,它将触发Activity中的函数并在{内调用{1}}。

在您的Activity中的Activity

ProgressBar

在您的private BroadcastReceiver pushMessageBroadCastReceiver; //here receive the broadcast from Firebase message,then your thing //add this inside onCreate() pushMessageBroadCastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(AppConfig.PUSH_NOTIFICATION)) { //Here your receive the data from onMessageReceived() //do your thing here Log.d("Activity","Is triggerred here") } } }; @Override protected void onResume() { super.onResume(); LocalBroadcastManager.getInstance(this).registerReceiver(pushMessageBroadCastReceiver, new IntentFilter(AppConfig.PUSH_NOTIFICATION)); } @Override protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(pushMessageBroadCastReceiver); } 类中(如果没有,请创建一个)

AppConfig

在您的// broadcast receiver intent filters public static final String PUSH_NOTIFICATION = "pushNotification"; 中添加以下代码,从此处触发您进行活动的onMessageReceived()

LocalBroadcastManager
相关问题