2016-08-08 2 views
0

Ich möchte den HTML-Inhalt einer Website mit Asynctask herunterladen, und verwenden Sie Regex, um den Quellcode zu manipulieren, um zu bekommen, was ich brauche und schließlich ich möchte diese Ergebnisse in einer Listenansicht anzeigen. dies ist mein Code es Fehler zeigen tut, aber wenn ich es auf meinem Emulator laufen die App abstürzt bitte Jungs, ich brauche Assistent das ist wirklich wichtigIch möchte den HTML-Inhalt einer Website mit asynctask herunterladen und Ergebnis in einem Listenansicht

public class DownloadTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... urls) { 
     String result = ""; 
     URL url; 
     HttpURLConnection urlConnection = null; 

     try { 
      url = new URL(urls[0]); 
      urlConnection = (HttpURLConnection)url.openConnection(); 
      InputStream in = urlConnection.getInputStream(); 
      InputStreamReader reader = new InputStreamReader(in); 
      int data = reader.read(); 

      while (data != -1) { 
       char current = (char) data; 
       result += current; 
       data = reader.read(); 
      } 
      return result; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView myLV = (ListView)findViewById(R.id.teamLV); 
    ArrayList<String> clubName = new ArrayList<String>(); 

    DownloadTask task = new DownloadTask(); 
    String result = null; 
    try { 
     result = task.execute("https://www.premierleague.com/clubs").get(); 
     //Log.i("Content of URL", result); 
     System.out.println(result); 
     Pattern p = Pattern.compile("class=\"clubName\">(.*?)<"); 
     Matcher m = p.matcher(result); 

     while(m.find()){ 
      System.out.println(m.group(1)); 
      clubName.add(m.group(1)); 
      ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, clubName); 
      myLV.setAdapter(arrayAdapter); 
     } 


    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 

}

+0

Ihre Antwort ist wahrscheinlich hier: http://stackoverflow.com/a/3506039 –

+0

Hat es in den Absturz versuchen? Können Sie diskutieren und überprüfen, auf welche Linie es stürzt? Kannst du Catlog senden? –

+0

Mögliches Duplikat von [using AsyncTask, um Daten in ListView anzuzeigen] (http://stackoverflow.com/questions/10335718/using-asynctask-to-display-data-in-listview) – Nico

Antwort

0

versuchen Sie OnPostExecute nach doInBackground. dann entfernen Sie den Teil von execute.get(). Die get-Methode macht die UI-Blockierung (was die asynctask sinnlos macht).

auch Ihren Adapter voreinstellen, anstatt jedes Mal einen neuen zu erstellen, wenn Sie eine Schleife machen. Möglicherweise benötigen Sie einen benutzerdefinierten Adapter (je nachdem, was Sie benötigen).

@Override 
protected void onPostExecute(String result) { 
    //Log.i("Content of URL", result); 
    System.out.println(result); 
    Pattern p = Pattern.compile("class=\"clubName\">(.*?)<"); 
    Matcher m = p.matcher(result); 

    while(m.find()){ 
     System.out.println(m.group(1)); 
     // clubName.add(m.group(1)); 

     adapter.add (m.group(1)); 

    } 
} 
+0

seine ausgabe das ergebnis ich aber wie bevölke ich listeansicht mit dem ergebnis –

+0

bewegen sie die adapter codes (neu und setAdapter) vor dem anruf der asyncTask. es sollte funktionieren. Weitere Informationen zum Hinzufügen von Elementen in einer Listenansicht finden Sie hier: http://stackoverflow.com/questions/4540754/dynamically-add-elements-to-a-listview-android. –

+0

Vielen Dank für Ihre Antwort, ich konnte es immer noch nicht zur Anzeige bringen ... –

Verwandte Themen