2011-10-11 59 views
0

我目前有一个显示渡轮时间表的Android应用程序。应用程序可以显示完整的时间表(只是一个巨大的列表),但是应用程序中的卖点将显示在接下来的两个渡轮离开时以及离开当前时间多长时间。将大型开关转换为散列(或其他建议)

我对Java比较陌生,目前在我的代码中使用了大量的Switch()语句。基本上,它获取当前的通话时间,并将其与时间表中的所有时间进行比较,在该时间点显示下两个出发时间,然后计算当前时间与出发时间之间的差异。

我相信switch语句不是速度目的以及代码更改目的的最佳想法。例如,如果一次改变了它的一堆代码行来进入并修复那一次更改。此外,如果整个时间表更改,则每个人都必须更新其应用程序以使时间更改生效。我的理想情况是将文件存储在我的网络服务器的某个地方,可以下载并插入散列表(我认为这是一个正确的术语),如果时间发生变化,它将载入新的日程安排。

不知道这是多么令人困惑,但如果有人能解释我如何使用散列表或其他可能建议完成此任务的其他东西,我们将不胜感激。目前,变量是两个渡轮码头以及自日程安排每天变化(星期一,星期五,星期六,星期日)以来的星期几。

下面是应用程序的屏幕截图,如果我的帖子不明确,您可以理解它。先谢谢你。

截图:

screenshot

+0

听起来像是使用命令模式的好地方。 HTTP://en.wikipedia。org/wiki/Command_pattern交换机往往效率很高,但代码可维护性更差。 –

回答

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

+1,尽管小记。 OP要显示下一个_two_值。这就是最好的解决方案:找到比当前时间更大的第一个值,然后返回该值和后面的值(适当的逻辑结束时间,确保在周末,周末和周末处理不同的日历,和假期)。 – CPerkins

+0

关于您对最终日期值的最终评论,是不是我能够检查ArrayIndexOutOfBoundsException,然后第一次查询下一个相应的数组? 也作为后续问题,因为这已经看起来像最好的答案,是否有标准阵列每个文件?或者我可以创建一个名为TimeTableArrays.java的文件,并将所有数组存储在那里,然后从另一个名为DisplayNextTime.java的文件中引用它们(例如)? – mattdonders

+0

@mattdonders我的心态是异常是出于错误而不是程序控制,所以我会亲自使用直接的if/else界限检查。不过,要么会奏效。您可以将数组存储在您希望的任何类中,并在外部引用它。不过,我真的会把它写到一个由应用程序读取的格式化文件中,而不是一个类。 –

0

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

此外,由于这是小型设备上的应用程序,因此您可以通过Internet连接连接到服务器上的日程安排数据库。这样你就只需要在一个地方(在服务器上)维护日程安排数据,而且客户端将始终使用最新的数据。

+0

我唯一的担心就是它需要互联网连接才能工作。我希望这个应用程序可以离线使用,如果(例如)他们正在搭乘地铁,他们可以在没有电话服务的情况下查看时间表。 – mattdonders

+0

然后,您需要重要数据的本地副本(用户所在的本地区域),直到inet连接再次可用。这通常是程序的一个子进程(复制)。恕我直言,整个移动应用程序的事情是,他们始终在可用的最佳数据上工作。 – PeterMmm

相关问题