I have never worked so straight. Sorry if I'm a little vague. I will try to talk about what I'm trying to do. I am trying to create a list that captures its data from webservice. When I initialize listview, I want to periodically check the web server and update the contents of the list. For this, I am doing something like this:
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(); } }
And the SearchHandler class is simple:
public class SearchHandler extends DefaultHandler { SearchAdapter _adapter; SearchItem _item; public SearchHandler() { } public SearchAdapter getFeed() { return _adapter; } public void parseJSON(String data) {
No matter what I do, the handler gets called and new items are retrieved, but the list is never updated. Any ideas on what might be wrong?
source share