2014-11-04 3 views
0

У меня есть на следующий XML SAX Handler: неAndroid: разделить очень большие строки

private class GetXML_Handler extends DefaultHandler { 
     int x = 0; 
     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
      Log.i("DataHandler", "Start of XML element"); 
      int y = 0; 
      if (qName.equals("polygon")) { 
       locations.add(x, new ArrayList<location>()); 
       String coordinates = attributes.getValue("coordinates"); 
       String[] parts = coordinates.split(","); 
       System.out.println("Cyklus zacaty"); 
       locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1]))); 
       for(int i = 2; i <= parts.length; i = i + 2){ 
        y++; 
        double Latitude = Double.parseDouble(parts[i].substring(2)); 
        double Longitude = Double.parseDouble(parts[i+1]); 
        locations.get(x).add(y, new location(Latitude, Longitude)); 
       } 
       System.out.println("cyklus skonceny"); 
       x++; 
      } 
     } 
    } 

Однако "cyklus zacaty" не получает распечатанную. Он печатает хорошо, если я перемещаю его до String[] parts = coordinates.split(","). Эти строки имеют большой объем (например, 350 GPS-координат), поэтому возможно, что java просто не справляется с этим, и он останавливается (без исключения).

Также мой «Начальный элемент XML» печатается всего 5 раз (до первых координат), но если я удалю этот метод разделения, он печатает 28 раз (количество моих XML-элементов). Я уверен, что мой обработчик XML работает правильно (это просто что-то о тех строках).

Структура XML, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<oblasti> 
    <oblast> 
     <nazovOblasti>VT</nazovOblasti> 
     <polygon> 
      <coordinates> 
       132456,4658789,0 56487,4864684 
      </coordinates> 
     </polygon> 
     .... 

Любые предложения?

Спасибо вперед

+0

Хорошо, могу сказать, что речь идет не о длине строк и методе разделения. – huidube

+0

Да, я понял, что когда я добавил только 6 координат, и он тоже остановился ... но я не вижу, где проблема – horin

+0

, вы должны использовать свой отладчик, чтобы увидеть, где программа останавливается/выходит. Или, мой любимый, используйте многие System.out.println(), чтобы выяснить, какие значения не так ожидаются. – huidube

ответ

1

Параметр Attributes не содержит дочерние элементы узла, а только атрибуты, назначенные узлу (если есть). Следовательно, attributes.getValue("coordinates") не делает то, что вы ожидаете.

+0

Да, я отредактировал его, и теперь он получает тексты, но все же некоторые из этих разделенных методов вызывают проблемы – horin

0

Я думаю, ваша проблема не связана с методом раскола, но эта линия:

locations.get(x).add(y, new location(Double.parseDouble(parts[0]), Double.parseDouble(parts[1]))); 

и причина в том, что строка имеет пробелы, и они остаются после того, как расщепляется, так он не может быть проанализирован.

попробовать это только после раскола и прежде чем что-то еще:

for (i=0; i<parts.length(); i++){ 
parts[i].trim(); 
} 

, когда происходит исключение, иногда разрывает нить, прежде чем последняя строка полностью выполнена, особенно, если это вывод на консоль. Меня это слишком разозлило. Это может быть причиной, по которой ваша печать не отображается.

+0

также получил строки: «0 56487» (он отправил в файле XML), что вызовет исключение NumberFormatException. Но это все еще не объясняет, почему он не получает никаких ошибок. И как обсуждалось ранее: он даже не достигает первого System.out.println(); Поэтому проблема должна быть где-то в другом месте. (обратите внимание, что проблема, о которой вы описали, также будет иметь место) – huidube

+0

True. Он тоже должен это контролировать. Но я думаю, что почему-то исключение не показывается, а все равно поднимается. –

+1

сделал редактирование моего исходного сообщения (отредактированная структура xml) ... У меня нет пробелов до или после запятых, поэтому нет необходимости обрезать, и я управляю этим «0 56487», используя подстроку (2) для каждого второго элемента – horin

Смежные вопросы