Есть ли способ получить прогресс функции XMLPullParser? - PullRequest
0 голосов
/ 06 марта 2020

Разбор занимает довольно много времени, и поэтому я хотел бы иметь возможность отображать индикатор выполнения. Однако я не могу найти способ получить прогресс для обновления. Проблема заключается в том, что, похоже, нет способа (по крайней мере, насколько я знаю) определить, сколько раз будет выполняться pullparser.next(). Я пытался добавлять и считать новые строки при начальной загрузке данных, но думал, что это тоже не дает правильного результата.

int eventType = pullparser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    if (eventType == XmlPullParser.START_TAG) {
        //Do stuff
    }
    eventType = pullparser.next();
    //Update progress by x%
}

1 Ответ

0 голосов
/ 06 марта 2020

Я разработал обходной путь на данный момент, разместив здесь, если кто-то наткнется на эту тему. Пока вы сохраняете символы новой строки в исходной строке XML: если вы проверите, что тип события - это текст, а что - пробел, и только увеличиваете счетчик, вы можете отработать ход выполнения.

private int incrementPullParser(int eventType, XmlPullParser xpp) throws XmlPullParserException, IOException {
            if (eventType == XmlPullParser.TEXT && xpp.isWhitespace()){
                //used for counting the progress
                currentLines++;
                publishProgress((double)(currentLines/maxLines)*100);
                return xpp.next();
            }
            return eventType;
        }
...