.getStringExtra 返回空值而不是 String

.getStringExtra returning null value instead String

在 putExtra 中获取值但无法在 getStringExtra 中检索。

public class StartNotificationReceiver extends BroadcastReceiver{




private void sendTodayNotification() {
    DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
    Date todateDate = new Date();
    String TodayDate_String = dateFormat.format(todateDate);
    String Val=AppSettingsPref.getStringValue(context, AppSettingsPref.KEY_TODAY_DATE_AND_TIME, "");
    if(!Val.equals(TodayDate_String))
    {
        AppSettingsPref.saveString(context, AppSettingsPref.KEY_TODAY_DATE_AND_TIME, TodayDate_String);

        final HGDate englishDate = new HGDate(context);
        englishDate.setGregorian(Calendar.YEAR, Calendar.MONTH + 1, 1);
        final HGDate islamicDateToday = new HGDate(englishDate);
        islamicDateToday.toHigri();
        int islamicDayToday = islamicDateToday.getDay();
        int islamicMonthToday = islamicDateToday.getMonth();

        String otherMonth = Dates.islamicMonthName(context, islamicDateToday.getMonth() - 1);
        int adjustedDate = AppSettingsPref.getIntValue(context, AppSettingsPref.CURRENT_ADJUSTMENT_KEY, 0);
        String todayDateTimeinhijri = islamicDateToday.getDay() + (adjustedDate) + " "
                + otherMonth + " " + islamicDateToday.getYear();




        Intent intent = new Intent(context,NotificationReceiver.class);
    -------->intent.putExtra("todayDateTimeinhijri", todayDateTimeinhijri.toString());<-----------




        databaseAccess = DatabaseAccess.getInstance(context);
        databaseAccess.open();
        ArrayList<Event> events = databaseAccess.showEventsByMuslimType(muslimType);
        for (int i = 0; i < events.size(); i++) {
            Event event = events.get(i);
            String[] date = event.getHejriDate().split("-");
            int islamicDayOfEvent = Integer.parseInt(date[0].trim());
            int islamicMonthOfEvent = Integer.parseInt(date[1].trim());
            boolean isViladat = event.isVilaadat;
            if (islamicDayToday == islamicDayOfEvent && islamicMonthToday == islamicMonthOfEvent) {
                makeNotification(event);
            }
        }
    }

intent.putExtra("todayDateTimeinhijri", todayDateTimeinhijri.toString());

这是 .getStringExtra 获取空值的地方

public class NotificationReceiver extends BroadcastReceiver{

 public void onReceive(Context context, Intent intent) {
        this.context = context;
}
        todayDateTime2 = intent.getStringExtra("todayDateTimeinhijri");

}

为了更好地理解,删除了额外的代码 提前致谢

我们将不胜感激。 找不到解决方案。

你在哪里发送(或开始)带有参数“todayDateTimeinhijri”的意图? 如果您不发送意图,NotificationReceiver 将无法接收任何内容。

//example activity using receiver and send intent via broadcast ( sendBroadcast(intent) )

public class Example extends AppCompatActivity {
    
    private NotificationReceiver mNotificationReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mNotificationReceiver = new NotificationReceiver();
        IntentFilter intentFilter = new IntentFilter("your_action");
        registerReceiver(mNotificationReceiver, intentFilter);

        StartNotificationReceiver mStartNotificationReceiver = new StartNotificationReceiver(getApplicationContext());
        mStartNotificationReceiver.sendTodayNotification();
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mNotificationReceiver != null) {
            unregisterReceiver(mNotificationReceiver);
        }
    }
    
    private class NotificationReceiver extends BroadcastReceiver {
        Context context;
        @Override
        public void onReceive(Context context, Intent intent) {
            this.context = context;
            String action = intent.getAction();// should be "your_action"
            String todayDateTime2 = intent.getStringExtra("todayDateTimeinhijri");
            Log.i("NotificationReceiver","action: " + action );
            Log.i("NotificationReceiver","dateTime: " + todayDateTime2 );
        }
    }

    public class StartNotificationReceiver {

        private Context context;

        public StartNotificationReceiver(Context ctx){
            this.context = ctx;
        }

        public void sendTodayNotification() {
            Intent intent = new Intent("your_action");
            intent.putExtra("todayDateTimeinhijri", "your String value");
            context.sendBroadcast(intent);
        }
    }
}

将额外的内容放入意图中并不会发送。某处会有 sendBroadcast() 调用或类似调用。