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

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

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

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

17.12.2013, 19:19. Просмотров 611. Ответов 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 ошибка при парсинге, универсальный парсер
Посмотрите здесь:

XML парсер Android
Android SDK Ошибка при запуске Android
android парсер Android
Ошибка при запуске Android Studio Android
Ошибка при парсинге страницы сайта Android
Ошибка при работе Android Studio Android
Android Ошибка при запуске Android Studio
Ошибка при эмуляции Android Studio Android
Android Studio Парсер Android
Ошибка при компиляции Android Studio Android
Android studio, ошибка при запуске эмулятора Android
Ошибка при парсинге или как лучше сделать? Android

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

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

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