小编Mar*_*ski的帖子

将Serializable对象传递给Pending Intent

我正在尝试将一个可序列化的对象发送到待处理的Intent.问题是收到的警报返回为null.即使Alarm实现了可序列化的接口.

//AlarmService.java

Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
Bundle bundle = new Bundle();
bundle.putSerializable("alarm", alarm);
myIntent.putExtras(bundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.getAlarmTime().getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)

收到的警报为空.

//AlarmAlertBroadcastReceiver.java

public class AlarmAlertBroadcastReciever extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Alarm alarm = (Alarm)intent.getExtras().getSerializable("alarm");
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我尝试过的更多内容如下,但它似乎不起作用:

//AlarmService.java

Intent myIntent = new Intent(getApplicationContext(), AlarmAlertBroadcastReciever.class);
myIntent.putExtra("alarm", alarm);
myIntent.setAction("abc.xyz");

PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC_WAKEUP, alarm.getAlarmTime().getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)

收到的警报为空.

//AlarmAlertBroadcastReceiver.java

public …
Run Code Online (Sandbox Code Playgroud)

java serialization android android-intent

6
推荐指数
2
解决办法
2689
查看次数

为什么每次调用函数时都不会重置变量

我正在阅读弗里斯比教授的大部分功能编程指南,我遇到了如下所示的代码示例.我不明白为什么每次调用squareNumber时缓存都不会重置为{}.

var memoize = function(f){
    var cache = {}; // why is this not reset each time squareNumber is called?

    return function() {
        var arg_str = JSON.stringify(arguments);
        cache[arg_str] = cache[arg_str]|| f.apply(f, arguments);
        return cache[arg_str];
    };
}

var squareNumber = memoize(function(x){ return x*x; });
squareNumber(4);
//=> 16
squareNumber(4); // returns cache for input 4
//=> 16
squareNumber(5);
//=> 25
squareNumber(5); // returns cache for input 5
//=> 25
Run Code Online (Sandbox Code Playgroud)

我的一个理论是,由于memoize是一个全局变量,因此每次调用缓存变量时都不会重置缓存变量.但我似乎无法找到一个好的解决方案.

javascript functional-programming

2
推荐指数
1
解决办法
983
查看次数