1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

HTML parsen geschwindigkeitsprobleme

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von smileyep1, 05.05.2011.

  1. smileyep1, 05.05.2011 #1
    smileyep1

    smileyep1 Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2011
    Hi - ich hab ein Problem mit meinem Code und zwar ist er unfassbar langsam ;)

    Habe das ganze erst in JAVA mit komandozeilenausgabe geschrieben und es dann später in ein Android Projekt eingebaut.

    Es wird im grunde genommen nur die Seite eingelesen und ein bissle mit Regex gearbeitet um ein paar fetzen aus der Seite zu holen.
    Funktioniert am PC auch wunderbar - doch sobald ich das ganze mit dem Android Emulator ausführe dauert es über 5 min bis ich meine Ausgabe auf dem Bildschirm habe.

    Auf meinem Handy verabschiedet sich das Programm nach etlichen minuten per Fehlermeldung.

    Hier mal der Code - wüsste gerne wie man die geschichte beschleunigen kann.

    Die Ursache des ganzen liegt bei
    PHP:
    while(d.ready())
                 {
                     
    content += d.readLine();
                     
                 }
    Hier der gesamte code

    PHP:
    public void onCreate(Bundle savedInstanceState
        {
            
    super.onCreate(savedInstanceState);
            
    setContentView(R.layout.main);
            
    TextView msgBox = (TextViewfindViewById(R.id.msgBox);
            
    msgBox.setText("Bereit zum Download");
            
            try
            {
                
    msgBox.setText("Shoutbox wird geladen");
                
    URL url_ = new URL("www.dieurldieichlesenwill.de");
                 
    URLConnection conn url_.openConnection();
                 
    DataInputStream in = new DataInputStream conn.getInputStream ( ) ) ;
                 
    BufferedReader d = new BufferedReader(new InputStreamReader(in"utf-8"));
                 
    String content "";
                 
    msgBox.setText("Inhalt wird eingelesen");
                 
                
                 while(
    d.ready())
                 {
                     
    content += d.readLine();
                     
                 }
                 
                    
                    if (
    content == "" )
                    {
                        
                        
    msgBox.setText("Seite konnte nicht runtergeladen werden");
                    }
                    else
                    {
                        
    msgBox.setText("Shoutbox Inhalt wurde erfolgreich geladen\n");
                        
    Pattern p Pattern.compile("<hr /><div style=\"width: 545px; overflow: hidden;\">(.*?)</div");
                        
    //Pattern p = Pattern.compile("(<hr /><div style=\"width: 545px; overflow: hidden;\">)(.+)(</div>)");   //.*?         - Irgend ein zeichen einmal oder mehr
                        
    Matcher m p.matcher(content);
                    
                        
    //String string_ausgabe = "";
                         //StringBuffer sb = new StringBuffer();
                        
    List<String> list = new ArrayList<String>();
                        
                         
    String [] eintraege;
                        
                        while (
    m.find())
                        {
                            
                            list.
    add(m.group(1));
                            
                            
    //Systemout.println( m.group(2));
                        
    }
                        
    eintraege = new String
    [list.size()];
                        
                        for (
    int i 0eintraege.lengthi++) 
                        {
                                
    eintraege[i] = list.get(i);
                        }
                        
                        
                        
                        for (
    int i 0eintraege.lengthi++)
                        {
                            
    msgBox.append(eintraege[i]+"\n");
                            
                        }
                        
                        
                        
    //lv_eintraege = (ListView)findViewById(R.id.lv_eintraege);
                        //lv_eintraege.setAdapter(new ArrayAdapter<Object>(this,android.R.layout.simple_list_item_1, eintraege));
                    
                        //System.out.println(string_ausgabe);
                        //System.out.println("Die Seite konnte eingelesen werden");
                    
    }    
                    
            }
            catch(
    PatternSyntaxException pse)
            {
                
    msgBox.setText("There is a problem with the regular expression!%n");
                
                
    System.exit(0);
            }
            catch ( 
    MalformedURLException e 
            {
                
    msgBox.setText"MalformedURLException: " );    
            }
            catch ( 
    IOException e 
            {
                
    msgBox.setText"IOException: " );
            }
       
        }
     
  2. Thyrion, 05.05.2011 #2
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,845
    Erhaltene Danke:
    2,450
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    Bau dein content mal nicht mit String + String + String + ... zusammen, sondern über einen StringBuffer oder StringBuilder.
     
  3. smileyep1, 05.05.2011 #3
    smileyep1

    smileyep1 Threadstarter Neuer Benutzer

    Beiträge:
    4
    Erhaltene Danke:
    0
    Registriert seit:
    05.05.2011
    Super danke für den Tipp :thumbsup: - der Emulator zeigt es nach ca 1-2 sek an.
     

Diese Seite empfehlen