将大型交换机转换为哈希(或其他推荐)

时间:2011-10-11 17:36:57

标签: java android hashmap switch-statement timetable

我目前有一个Android应用程序,显示渡船的时间表。该应用程序可以显示完整的时间表(只是一个巨大的列表),但应用程序的卖点是它将显示下两个渡轮何时离开以及离开当前时间多长时间。

我是Java的新手,目前在我的代码中使用大型的Switch()语句。基本上,它获取当前的电话时间并将其与计划中的所有时间进行比较,此时它显示接下来的两个出发时间,然后计算当前时间与出发时间之间的差异。

我确信switch语句不是速度目的以及代码更改目的的最佳选择。例如,如果有一次改变其中的一堆代码行进入并修复该一次更改。此外,如果整个计划更改,则每个人都必须更新其应用以使时间更改生效。我理想的情况是在我的网络服务器上的某个地方存储一个可以下载并插入到散列图中的文件(我认为是正确的术语),如果时间有变化,它会加载新的计划。

不确定这是多么令人困惑,但如果有人能够解释我如何使用hashmap或其他你可能建议完成此任务的其他内容,我们将不胜感激。目前,变量是两个渡轮码头以及自每天日程变更后的星期几(星期一,星期五,星期六,星期日)。

下面是该应用程序的屏幕截图,如果我的帖子不清楚,您可以理解它。提前谢谢。

屏幕截图:

screenshot

2 个答案:

答案 0 :(得分:1)

将计划对象存储在已排序的数组中。然后,您可以二进制搜索数组,查找大于当前时间的第一个值。你可能会使用一些父数组,包括位置和适用的星期几。

您可以轻松地将这种数据结构写入读取和读取的文件中。应用程序解析更新而不是编译到代码中。

这个细节?首先,在Android中understand resources。如果不存在更新的计划,则回退到默认资源。

其次,使用HTTP头请求检查是否存在较新的文件。如果有,解析,下载&保存状态。 Saving Android Activity state using Save Instance State

最后,XML对于数据分发很方便,即使它不是很快。每个人都理解它,并且很容易更新或交付。

<ferry location=0 time=2045>
    <day>1</day>
    <day>2</day>
    <day>3</day>
    <day>4</day>
    <day>5</day>
</ferry>

<ferry location=0 time=0800>
    <day>6</day>
</ferry>

答案 1 :(得分:0)

您需要类似数据库的东西来保存计划数据。这将帮助您从数据中分离代码。我不熟悉Android,但我认为设备上有sqlite数据库的接口。

此外,由于这是小型设备上的应用程序,您可以通过Internet连接连接到服务器上的计划数据库。这样,您必须仅在一个地方(在服务器上)维护计划数据,客户端将始终使用最新数据。