In order to get XML data from a server repeatedly, I\'m attempting to use AsyncTask and Timer as per Mark Murphy\'s suggestion.
I get the following error:
I got this to work thanks to James's answer.
I've included the code below in case it's useful to anyone.
Caveat developer! The code works for me, but may contain errors.
package com.example.test;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
public class MyXmlPoller extends Activity {
private Handler handler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Timer().schedule(new MyTimerTask(), 0, 1000);
}
private class MyAsyncTask extends AsyncTask {
protected MyData doInBackground(Integer... counter) {
MyData myData = new MyData();
try {
URL url = new URL("http://www.example.com/my.xml");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
MySAXHandler mySAXHandler = new Handler();
xr.setContentHandler(mySAXHandler);
xr.parse(new InputSource(url.openStream()));
myData = mySAXHandler.getParsedData();
return myData;
} catch (Exception e) {
Log.e("!!!!!!!!!! MyAsyncTask doInBackground error", e.getMessage(), e);
return myData;
}
}
protected void onPostExecute(MyData myData) {
Log.d("+++++++++++++ MyAsyncTask onPostExecute", myData.toString());
}
} // MyAsyncTask
public class MyTimerTask extends TimerTask {
private Runnable runnable = new Runnable() {
public void run() {
new MyAsyncTask().execute();
}
};
public void run() {
handler.post(runnable);
}
}
}