2015-07-23 3 views
0

Я пытаюсь отправлять запросы в Google API с помощью приложения JavaFX. Я использую API дорог Google. Проблема в том, что я прошу пользователя импортировать документ Excel с координатами, и документ может содержать как можно больше данных о широте и долготе, но API Google допускает только менее 100 пар координат. Итак, как я могу обслуживать данные, которые находятся в списке массивов из индекса в позиции от 0 до 99, а при нажатии кнопки служат следующий набор координат от 100 до 199 или меньше. В настоящее время я могу обслуживать arraylist.sublist (0to99) и возвращать ответ json. Заранее спасибоОбслуживание URL-адресов контроллеру веб-представления в Java javafx

+0

Первый 'arraylist.sublist (0.99)' сделать запрос апи и сохранить дату, а затем 'arraylist.sublist (100199)' сделать другой запрос API. – bjiang

+0

Это помогает. Но я получаю ошибку исключения, потому что данные не обязательно распространяются на 199 пар координат. В моем случае тестовый файл excel имеет 154 пары координат. Таким образом, arraylist.sublist (0to99) действителен, но. Подсвечник (100to199) не имеет данных, и, следовательно, исключение. Итак, как я могу сделать это умным? Поскольку координаты могут быть всего двумя, и столько, сколько пользователь импортировал файл excel. –

+0

Возможно, вам стоит попробовать что-то вроде метода '.size()', чтобы 'arraylist.sublist (100, arraylist.size())'. – bjiang

ответ

0
//On fx button click the following happens 
    @FXML public void loadURL(Event event){ 
    co_ordinates = Excel_Exchange.value; 
    if(!next){ 
     limit = (int)co_ordinates.size(); 
     next = true;//some global boolean variable so that this is done once 
    } 
    if(co_ordinates.size()<100){ 
     StringBuilder urlCaseOne = new StringBuilder(co_ordinates.subList(start, co_ordinates.size()).toString().replaceAll("[\\[\\]]","").replaceAll(", ","")); 
     url_link = "https://roads.googleapis.com/v1/snapToRoads?path="+urlCaseOne.deleteCharAt(urlCaseOne.length()-1)+"&interpolate=true&key="+API_KEY; 
    }else{ 
     if(limit>100){ 
      StringBuilder urlCaseTwo = new StringBuilder(co_ordinates.subList(start, end).toString().replaceAll("[\\[\\]]","").replaceAll(", ","")); 
      url_link = "https://roads.googleapis.com/v1/snapToRoads?path="+urlCaseTwo.deleteCharAt(urlCaseTwo.length()-1)+"&interpolate=true&key="+API_KEY; 
      //System.out.println("l"+limit+" s"+start+" e"+end); 
      start+=100; end+=100; limit-=100; 
     }else if(limit<100){ 
      StringBuilder urlCaseThree = new StringBuilder(co_ordinates.subList(start, co_ordinates.size()).toString().replaceAll("[\\[\\]]","").replaceAll(", ","")); 
      url_link = "https://roads.googleapis.com/v1/snapToRoads?path="+urlCaseThree.deleteCharAt(urlCaseThree.length()-1)+"&interpolate=true&key="+API_KEY; 
     } 
    } 
    //System.out.println(co_ordinates.size()); 
    //System.out.println(url_link); 
    //System.out.println(co_ordinates.toString().lastIndexOf("|")); 
    //System.out.println(co_ordinates.subList(0, 99).size()); 
    startLoadState.apply(); 
    this.engine.load(url_link); 
}// i have another method that navigates back by to the first url