Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5
#1

Android, XML ошибка при парсинге, универсальный парсер - Программирование Android

17.12.2013, 19:19. Просмотров 638. Ответов 0
Метки нет (Все метки)

У меня возникла проблема при парсинге (xmlPullParser), выдает ошибку, лог:
Код
12-17 17:10:08.355: W/System.err(28761): org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT @1:2 in java.io.InputStreamReader@428a04b8) 
12-17 17:10:08.365: W/System.err(28761): 	at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
12-17 17:10:08.365: W/System.err(28761): 	at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
12-17 17:10:08.365: W/System.err(28761): 	at ru.homeandroid.MainActivity$XMLDownloader.processRecivedData(MainActivity.java:192)
12-17 17:10:08.370: W/System.err(28761): 	at ru.homeandroid.XmlDownload.tryParsingXmlData(XmlDownload.java:53)
12-17 17:10:08.370: W/System.err(28761): 	at ru.homeandroid.XmlDownload.doInBackground(XmlDownload.java:29)
12-17 17:10:08.370: W/System.err(28761): 	at ru.homeandroid.XmlDownload.doInBackground(XmlDownload.java:1)
12-17 17:10:08.370: W/System.err(28761): 	at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-17 17:10:08.370: W/System.err(28761): 	at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-17 17:10:08.370: W/System.err(28761): 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-17 17:10:08.370: W/System.err(28761): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-17 17:10:08.370: W/System.err(28761): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-17 17:10:08.370: W/System.err(28761): 	at java.lang.Thread.run(Thread.java:841)
Вызов:
Java
1
2
XMLDownloader downloader = new XMLDownloader("http://server.ru/script.php"); 
                downloader.execute();
Сам код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    class XMLDownloader extends XmlDownload{ 
        public XMLDownloader(String url) {  //construct
            super(url);
        }
 
        public String TAG="MyLog";
                                                                    
        void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException { 
            int eventType = -1; 
            int recordsFound = 0; 
             
            String tagName = "", login = "", pass = "", status = "";
             
            while(eventType!=XmlResourceParser.END_DOCUMENT) 
            { 
                switch(eventType)  
                { 
                    case XmlResourceParser.START_TAG: 
                    tagName=xmlData.getName();  
                    Log.d(TAG, "Text_TAGNAME: <"+tagName+">");
                    break; 
                    
                    case XmlResourceParser.TEXT:
                        Log.d(TAG, "Text_TAGNAME: <"+tagName+">"+xmlData.getText()+"</"+tagName+">");
                        if(TextUtils.equals(tagName,"login")) {login = xmlData.getText(); }
                        if(TextUtils.equals(tagName,"pass")) { pass = xmlData.getText();}
                        if(TextUtils.equals(tagName,"status")) {status = xmlData.getText(); }
                        break;
 
                     case XmlResourceParser.END_TAG:
                          recordsFound++; 
                          tagName = "";
                          if ("item".equals(xmlData.getName())) {
                                  publishProgress(login, pass, status);
                          }
                     break;
                
                  default:  break;
                } 
                
                eventType=xmlData.next(); 
                 
                if(recordsFound==0){ 
                    publishProgress(); 
                } 
            }    
        } 
 
 
         
        @Override 
        protected void onProgressUpdate(String... values){      
            if(values.length>1) 
            { 
                String login = values[0], pass = values[1], status = values[2];
                MainActivity.this.checkOutOfSever(login,pass,status); 
            }
            super.onProgressUpdate(values); 
        }
        
        
       @Override 
       protected void onPostExecute(Integer result) {           //действие после полной загрузки XML 
 
 
       } 
    }
Класс XmlDownload:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public abstract class XmlDownload extends AsyncTask<Object, String, Integer>{
 
    private String serverRequest;
    
    public XmlDownload(String url){
        serverRequest=url;
    }
    
    @Override 
    protected Integer doInBackground(Object... params) { 
         
        XmlPullParser recivedData = null; 
        try { 
            recivedData = tryDownloadingXmlData(); 
        } catch (IOException e) { e.printStackTrace();  } 
        int recordsFound = 0; 
        try { 
            recordsFound = tryParsingXmlData(recivedData); 
        } catch (XmlPullParserException e) {  e.printStackTrace(); } 
        catch (IOException e) { e.printStackTrace(); } 
        return recordsFound; 
    } 
    
    private XmlPullParser tryDownloadingXmlData() throws IOException {     
        try{ 
        URL xmlUrl = new URL(serverRequest); 
        
        XmlPullParser recivedData = XmlPullParserFactory.newInstance().newPullParser(); 
        recivedData.setInput(xmlUrl.openStream(),"UTF8"); 
        
        return recivedData; 
        }  
        catch(XmlPullParserException e){ } 
        catch(IOException e) { } 
        return null; 
    } 
     
     
    private int tryParsingXmlData(XmlPullParser recivedData) throws XmlPullParserException, IOException { 
        if(recivedData != null) 
        { 
            processRecivedData(recivedData); 
        } 
        return 0; 
    } 
    
    abstract  void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException;
    
}
XML - сообщение которое получаю от сервера:
XML
1
2
3
4
5
6
7
8
п»ї<?xml version="1.0" encoding="utf-8" ?>
<message>
  <item>
    <login>sanu0074</login>
    <pass>pwd1</pass>
    <status>ok_1</status>
  </item>
</message>
Непойму в чем дело, до этого работало когда-то, пока не поменял структуру сайта.

И еще вопрос, можно ли как-то все это сделать более универсальным, например чтобы создавать экземпляр XmlDownload, в которые вернется объект со свойствами {field1:val,field2:val, ...}, где каждое field - будет соответствовать тэгу в XML-сообщение, так хочется сделать чтобы для каждого activity и каждого скрипта на сервере не лепить собственный processRecivedData(), можно ли так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 19:19     Android, XML ошибка при парсинге, универсальный парсер
Посмотрите здесь:

Ошибка при парсинге страницы сайта - Программирование Android
В методе онклик пишу: public void onClick(View v) { Document doc = null; try { doc =...

Ошибка при парсинге или как лучше сделать? - Программирование Android
Ребята помогите пожалуйста. В папке assets у меня 7 txt. файлов.7 вопросов. По нажатию на кнопку, происходит парсинг каждого файла и...

android парсер - Программирование Android
Читал на хабре статью о парсинге stackoverflow http://habrahabr.ru/post/115127/. Нашел исходники.При запуске проекта LogCat выдал ...

XML парсер - Программирование Android
Здраствуйте появился такой вопрос парсю парсерю... кароче делаю выборку из сайта:) через библиотеку htmlcleaner по вот этому примеру...

Ошибка при запуске Android Studio - Программирование Android
Скачал Android Studio с официального сайта. Установил, но при запуске выдает ошибку(см. вложение). Изначально он ругался на JAVA_HOME....

Ошибка при работе Android Studio - Программирование Android
Вот такая ошибка выходит после запуска Android Studio 1.3.1 И почему не нажимается Run в программе?

Android SDK Ошибка при запуске - Программирование Android
При запуске SDK менеджера возникла такая проблема: Подскажите, пожалуйста, в чем может быть проблема? Проверила и доступ к папкам, и...

Ошибка при эмуляции Android Studio - Программирование Android
при запуске (не самой студии а уже эмуляции проекта) выскакивает ошибка &quot;emulator: ERROR: unknown skin name 'WVGA800'&quot; эмулятор как я понял...

Ошибка при работе с галереей в android 6 - Программирование Android
Здравствуйте, мне нужно получить физический путь к файлу из галереи, этот код отлично работает до андройда 6 if (resultCode ==...

Ошибка при компиляции Android Studio - Программирование Android
Доброго времени суток! Я только установил Android Studio, набросал пару кнопок, и решил скомпилировать. Но мне выдаёт ошибку ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru