如何将Instant转换为Int



在我的应用程序中,我有AlarmManager来设置定时通知。

为了对每个项目都有唯一的通知,我需要为每个挂起的意图设置唯一的id,否则通知会相互重叠。

我的问题是我的PK是字符串,而不是int。在我的Item模型中,我最接近int的东西是Instant,它代表通知应该发送的时间,而且它是唯一的。

因为PendingIntentid只是一个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。

这可能不是一个完整的答案,但我没有足够的声誉来评论。

相关内容

  • 没有找到相关文章

最新更新