2011-08-31 42 views
1

我尝试修复它,但列表数据没有显示出来。另外,在我的代码中有一些红线。 onPostExecute它通知构造函数SimpleAdapter(EventsActivity.syncEvent,ArrayList>,int,String [],int [])未定义。如何从以下示例实现AsyncTask?

另一件事,我想要做的就是当我们刷新时显示一个progress,就像我们刷新facebook上的通知一样,我们将看到刷新数据的动画,我们刷新了数据的最后日期和时间。我那样做?你有什么主意吗?我很新的实施。感谢您的建议。

public class EventsActivity extends ListActivity { 

    EventDataSet sitesList = null; 
    ArrayList> mylist = new ArrayList>(); 

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

} 

    private class syncEvent extends AsyncTask{ 

     @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 map = new HashMap(); 
       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); 
     } 


    } 

} 

回答

3

的问题是与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 }); 
+0

非常感谢你的工作 –

+0

很高兴能帮到你。 –

1

现在你可以通过这个称之为:: new syncEvent().execute();

像::

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

可能是一种方法..做,我已经尝试过, ..at“onPostExecute”它通知构造函数SimpleAdapter(EventsActivity.syncEvent,ArrayList >,int,String [],int [])未定义 –

+0

非常感谢您的工作 –

+0

欢迎您 –