解析需要花费一些时间,因此我希望能够显示进度条。但是我似乎找不到找到更新进度的方法。
问题来自这样的事实,即似乎没有一种方法(至少据我所知)来检测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%
}

最佳答案

我目前已经设计了一种解决方法,如果有人偶然发现此线程,请放置在此处。只要将换行符保留在原始XML字符串中:如果您检查eventype是文本并且是空白,并且仅增加计数器,那么就可以计算出进度。

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;
        }

10-06 06:52