How to get XML using AsyncTask and Timer?

后端 未结 5 913
星月不相逢
星月不相逢 2020-12-15 01:44

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:

         


        
5条回答
  •  醉话见心
    2020-12-15 02:50

    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);
            }
        }
    }
    

提交回复
热议问题