2011-10-11 8 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

End-of-Day 값에 대한 최종 의견과 관련하여 ArrayIndexOutOfBoundsException을 확인한 다음 처음으로 다음 해당 배열을 쿼리 할 수 ​​없습니까? 또한이 질문에 대한 답변은 이미 가장 좋은 답변으로 보입니다. 파일 당 배열에 대한 표준이 있습니까? 아니면 TimeTableArrays.java라는 파일을 만들고 거기에 모든 배열을 저장 한 다음 DisplayNextTime.java라는 파일 (예를 들어)에서 파일을 참조 할 수 있습니까? – mattdonders

+0

@mattdonders 예외는 프로그램 제어가 아니라 실수를위한 것이므로 직접 if/else 경계 검사를 직접 사용하는 것이 좋습니다. 어느 쪽이든 작동합니다. 배열을 원하는 모든 클래스에 저장하고 외부에서 참조 할 수 있습니다. 필자는 실제로이 파일을 클래스가 아닌 앱에서 읽는 형식화 된 파일에 씁니다. –

0

일정 데이터를 보관하려면 데이터베이스와 같은 것이 필요할 것입니다. 그러면 데이터에서 코드를 분리하는 데 도움이됩니다. 나는 안드로이드에 익숙하지 않지만 장치에 sqlite 데이터베이스에 대한 인터페이스가 있다고 생각합니다.

또한이 장치는 소형 장치에 적용되므로 인터넷 연결을 통해 서버의 일정 데이터베이스에 연결할 수 있습니다. 그렇게하면 일정 데이터를 서버의 한 곳에서만 유지해야하며 클라이언트는 항상 최신 데이터를 사용합니다.

+0

이것에 대한 나의 두려움은 인터넷 연결이 필요하다는 것입니다. 나는이 응용 프로그램을 오프라인에서도 사용할 수 있기를 원합니다. 예를 들어 지하철을 타면 전화 서비스없이 일정을 확인할 수 있습니다. – mattdonders

+0

그러면 inet 연결을 다시 사용할 수있을 때까지 중요한 데이터 (사용자가있는 로컬 영역)의 로컬 사본이 필요합니다. 그것은 보통 당신의 프로그램 (복제)의 하위 프로세스입니다. IMHO 모바일 앱의 모든 기능은 항상 최상의 데이터를 이용할 수 있다는 것입니다. – PeterMmm