Как реализовать AsyncTask из следующего примера? - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь это исправить, но данные списка не отображаются .. Также в моем коде есть красная линия.onPostExecute он сообщает, что конструктор SimpleAdapter(EventsActivity.syncEvent, ArrayList<HashMap<String,String>>, int, String[], int[]) не определен.

Еще одна вещь, которую я хотел бы сделать, это показать progress, когда мы обновляем, даже когда мы обновляем уведомление в Facebook, мы увидиманимация обновления данных, дата и время последнего обновления. Как я могу это сделать?Есть ли у вас какие-либо идеи?Я совершенно новичок в реализации.Спасибо за совет.

public class EventsActivity extends ListActivity {

    EventDataSet sitesList = null;
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);

    }

    private class syncEvent extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... arg0) {
            try {
                /** Handling XML */
                SAXParserFactory spf = SAXParserFactory.newInstance();
                SAXParser sp = spf.newSAXParser();
                XMLReader xr = sp.getXMLReader();

                /** Send URL to parse XML Tags */
                URL sourceUrl = new URL(
                        "http://xxxx.heroku.com/xxxxxxxxxxx.xml");

                /** Create handler to handle XML Tags ( extends DefaultHandler ) */
                EventXMLHandler myXMLHandler = new EventXMLHandler();
                xr.setContentHandler(myXMLHandler);
                xr.parse(new InputSource(sourceUrl.openStream()));

            } catch (Exception e) {

            }

            /** Get result from MyXMLHandler SitlesList Object */
            sitesList = EventXMLHandler.sitesList;

            /** Set the result text in textview and add it to layout */
            for (int i = 0; i < sitesList.getName().size(); i++) {
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("name", "Name: " + sitesList.getName().get(i));
                map.put("createat", "Create-At: " + Convertor.getDateTimeDDMMYY(sitesList.getCreateat().get(i)));

                mylist.add(map);
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {

            ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.eventitem,
                    new String[]{"name", "createat"},
                    new int[]{R.id.item_title, R.id.item_subtitle});

            setListAdapter(adapter);
            //super.onPostExecute(result);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

Проблема со ссылкой this. Когда вы находитесь внутри AsyncTask, this ссылается на ваш подкласс AsyncTask, а SimpleAdapter требует Context в качестве первого параметра. Вы должны заменить вызов явной ссылкой на родительский класс:

new SimpleAdapter(EventsActivity.this, mylist , R.layout.eventitem, 
                new String[] { "name", "createat" }, 
                new int[] { R.id.item_title, R.id.item_subtitle });
1 голос
/ 31 августа 2011

теперь вы можете позвонить по этому адресу: new syncEvent().execute();

как ::

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listplaceholder);
    new syncEvent().execute();
}
...