Android: Comment puis-je faire une liste à jour périodiquement?

Je n'ai jamais eu ce travail de façon simple. Désolé si je suis un peu vague. Je vais essayer de donner des précisions sur ce que je suis en train de faire. Je suis en train de construire une listview qui saisit ses données à partir d'un webservice. Une fois que j'initialise une listview, je veux garder l'interrogation du serveur web régulièrement et de mettre à jour le contenu de la liste. Pour cela, je suis en train de faire quelque chose comme ceci:

public class SampleAutoUpdateList extends Activity {
//Autoupdate handler
private Handler handler = new Handler();
private Runnable updater = new Runnable() {
public void run() {
/*
* Update the list 
*/
try {
Log.i("UPDATE", "Handler called");
searchAdapter = getFeed(URL);
searchAdapter.notifyDataSetChanged();
handler.postDelayed(this, Configuration.REFRESH_INTERVAL);
} catch(Exception e) {
Log.e("UPDATE ERROR", e.getMessage());
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linearmode);
this.context = this;
searchAdapter = getFeed(URL);
LinearLayout l2 = (LinearLayout) findViewById(R.id.secondaryLayout);
ListView list = new ListView(context);
l2.addView(list);
//display UI
UpdateDisplay(list);
updater.run();
}
private SearchAdapter getFeed(String URL) {
try
{
SearchHandler handler = new SearchHandler();
URL url = new URL(URL);
String data = convertStreamToString(url.openStream());
data = data.substring(data.indexOf('['), data.length()-1);
handler.parseJSON(data);
return handler.getFeed();
}
catch (Exception ee)
{
//if we have a problem, simply return null
Log.e("getFeed", ee.getMessage());
return null;
}
}
private void UpdateDisplay(View searchView) {
//TODO Auto-generated method stub
//TODO Auto-generated method stub
searchList = (ListView) searchView;
myProgressDialog = ProgressDialog.show(this,       
"Please wait...", "Loading search....", true); 
new Thread() { 
public void run() { 
try{ 
Thread.sleep(2000); 
} catch (Exception e) {  } 
runOnUiThread(new Runnable() { 
@Override 
public void run() { 
if (searchAdapter == null)
{
Log.e("ERROR", "No Feed Available");
return;
}
searchAdapter.setContext(context);
searchList.setAdapter(searchAdapter);
searchList.setSelection(0);
} 
}); 
//Dismiss the Dialog 
myProgressDialog.dismiss(); 
} 
}.start(); 
}
}

Et la SearchHandler classe est simple:

public class SearchHandler  extends DefaultHandler {
SearchAdapter _adapter;
SearchItem _item;
public SearchHandler()
{
}
public SearchAdapter getFeed()
{
return _adapter;
}
public void parseJSON(String data) {
//TODO Auto-generated method stub
_adapter = new SearchAdapter();
JSONArray parseArray;
try {
parseArray = new JSONArray(data);
for (int i=0; i < parseArray.length(); i++) {
SearchItem item = new SearchItem();
JSONObject jsonUser = parseArray.getJSONObject(i);
item.set_from(jsonUser.getString ("from"));
item.set_msg(jsonUser.getString("msg"));
}
} catch (JSONException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Peu importe ce que je fais, le gestionnaire est appelé et les nouveaux éléments sont récupérés, mais la liste n'est jamais actualisée... Toutes les idées sur ce qui pourrait mal se passer?

Pourriez-vous envisager d'ajouter quelques paragraphes pour expliquer, en détail, ce que c'est que vous essayez d'accomplir? Qui aidera les gens à vous donner des réponses.
Désolé... Juste mis à jour à ma question...

OriginalL'auteur Legend | 2010-02-04