2014-10-19 1 views
1

for 루프를 사용하여 android에서 GPX 파일을 구문 분석하고 그 결과 lat 및 long을 Google 정적지도에 적합한 문자열에 넣습니다. 정적지도 api는 ~ 2000 자까지 URL을 허용합니다.for 루프 결과의 크기 제한

내가 원하는 것은 너무 많은 문자를 생성하지 않고 최대 디테일을 얻을 수 있도록 gpx 파일의 항목을 반복하는 것입니다. 예를 들어, 위도와 경도가 10 자이면 가능한 한 200 개의 마커에 근접하게 생성하고 싶습니다. 나는이 작업 코드

List<Location> gpxList = decodeGPX(gpxFile); 
for(int i = 0; i < gpxList.size(); i++){ 
    info += ((Location)gpxList.get(i)).getLatitude() 
      + "," 
      + ((Location)gpxList.get(i)).getLongitude() + "|"; 
} 

허용 마커의 최대 수 (이 예에서는 200)을 기준으로 목록과 분열의 길이를 가지고하는 것이 작업을 수행 할 수있는 확실한 방법으로 시작하고

보장 이것은 정수이며 루프가 반복 할 때 많은 항목을 증가시킵니다. 그러나 목록의 끝 부분에서 한계 밖의 오류가 발생하지 않도록하려면 어떻게해야합니까?

편집

내가 데이터 포인트의 빈도를 줄일보다는 그 의미가 경우 점의 수를 줄이고 자 명확합니다. 왕복 여행을 제공하는 2000 자릿수의 gpx 파일이 있다고 가정 해보십시오. 나는 여행의 시작만을 제공하는 처음 200 점을 나열하는 것보다 정밀도가 떨어지는 전체 여행을 제공하는 200 점의 목록을 만들고 싶습니다.

답변

1

info에 새 문자를 추가하기 전에 String (나는 그것이 문자열이라고 가정 함) 추가 할 문자 수를 확인하고 info 문자열에 충분한 공간이 있는지 확인하십시오. 그렇지 않은 경우 루프를 종료하십시오.

List<Location> gpxList = decodeGPX(gpxFile); 
boolean hasRoom = true; 
for(int i = 0; i < gpxList.size() && hasRoom; i++) { 
    String next = ((Location)gpxList.get(i)).getLatitude() 
      + "," 
      + ((Location)gpxList.get(i)).getLongitude() + "|"; 
    if (info.length()+next.length()<=2000) 
     info += next; 
    else 
     hasRoom = false; 
} 
+4

루프 내부에서 String을 만들고 String 연결을 수행하는 대신 하나의 StringBuilder (루프 이전에 작성)를 사용하는 것이 좋습니다. Solution with Strings는 가비지 컬렉터에 많은 작업을하는 많은 객체를 만듭니다. –

+2

@ BartoszBilicki 전적으로 동의합니다. 간단히 말해 OP의 코드에 대한 대답을 기반으로했습니다. 대체로 StringBuilder를 사용하기 위해 문자열의'+'연산자로 코드를 변경합니다. – Eran

+0

고마워요.하지만 제가 찾고있는 것이 아닙니다. 내 잘못, 이것을 시도하고 수정하기위한 편집을 추가 할 것입니다. – EnduroDave