在我的应用程序中,我有AlarmManager
来设置定时通知。
为了对每个项目都有唯一的通知,我需要为每个挂起的意图设置唯一的id,否则通知会相互重叠。
我的问题是我的PK是字符串,而不是int。在我的Item模型中,我最接近int的东西是Instant,它代表通知应该发送的时间,而且它是唯一的。
因为PendingIntent
id只是一个int,我如何将Instant转换为int?或者我应该采取另一种方法,在我的模型中创建数据字段,只是为了保存挂起的意向ID?
据我所知,我不应该直接转换它,因为它会打乱日期/时间,而且可能(?(不会通过唯一的
我认为这应该有效:
instant.get(ChronoField.INSTANT_SECONDS)
使用hashCode
可以进行简单字符串到int的转换。但从定义上讲,散列码并不是唯一的。如果可能的话,将类型从int
更改为String
可能是最好的选择。如果你真的需要转换,我建议你创建一些类似和IndexProvider
的东西。
public interface IndexProvider {
/**
* Idempotent index provider for id conversion.
* Be aware of memory consumption because the implementations are allowed to cache id's.
* @param id unique id
* @return a cached unique id or a new unique id
*/
int getIndex(String id);
}
这将使您能够简单地解决问题。您可以在实现中使用映射来保存String
id。另一个想法是在数据库中解决这个问题。例如,一个新表为每个String
id保存一个int
id。最后,你必须修改一些内容,并且每种方法都有Pro和Contra。
这可能不是一个完整的答案,但我没有足够的声誉来评论。