J'essaye d'analyser un site Web en utilisant Jsoup, prenez l'information que je reçois et remplissez un ListView
. Le code HTML ressemble à ceci:Utilisation de Jsoup pour remplir un ListView
<ul class="list_view">
<li>
<a href="/username/" >
<table class="pinner">
<tbody>
<tr>
<td class="first_td">
<img src="http://myimgurl.com/img.jpg">
</td>
<td>
<span class="user_name">User Name</span>
</td>
</tr>
</tbody>
</table>
</a>
</li>
</ul>
Ainsi, à partir de ce HTML, je dois obtenir le href
de la balise, ainsi que le texte span.user_name. Je dois prendre ces deux éléments et les stocker dans un HashMap
(je pense ??) En ce moment, je l'ai dans un AsyncTask
comme ça (mais je ne pense pas que je le fais de la bonne façon):
private class MyTask extends AsyncTask<Void, Void, List<HashMap<String, String>>> {
@Override
protected List<HashMap<String, String>> doInBackground(Void... params) {
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
try {
Document doc = Jsoup.connect("http://myurl.com").get();
Elements formalNames = doc.select("li a table tbody tr td span.user_name");
Elements userNames = doc.select("li a");
for (Element formalName : formalNames) {
map.put("col_1", formalName.text());
fillMaps.add(map);
System.out.println(formalName.text());
}
for (Element userName : userNames) {
map.put("col_2", userName.attr("href").toString());
fillMaps.add(map);
System.out.println(userName.attr("href").toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return fillMaps;
}
@Override
protected void onPostExecute(List<HashMap<String, String>> result) {
String[] from = new String[] {"col_1", "col_2"};
int[] to = new int[] { R.id.text1, R.id.text2 };
ListView _listview = (ListView)findViewById(R.id.listView1);
SimpleAdapter _adapter = new SimpleAdapter(FriendsActivity.this, fillMaps, R.layout.friends, from, to);
_listview.setAdapter(_adapter);
}
}
Cela imprime avec succès l'information que je veux, mais il ne remplit pas le ListView
. J'ai essayé de réarranger, etc. mais toujours pas de chance. Je serais très reconnaissant pour toute aide.
Merci pour la réponse @tjPark. Je n'ai pas getView() dans mon code. Peut-être que cela fait partie du problème? Avez-vous un exemple de comment je peux mettre en œuvre cela? – Shan
@Shan ma réponse pourrait être fausse, maintenant je vois votre constructeur est un peu différent .. cependant, ce tutoriel est idéal pour listview: [http://www.vogella.com/articles/AndroidListView/article.html](http : //www.vogella.com/articles/AndroidListView/article.html) – tjPark
J'ai changé de List en Map et il remplit le ListView maintenant, mais il ajoute seulement le dernier ensemble de col_1, col_2 encore et encore. – Shan