【问题标题】:How to implement AsyncTask from the following example?如何从以下示例中实现 AsyncTask?
【发布时间】:2011-08-31 05:42:11
【问题描述】:

我尝试修复它,但列表数据没有显示出来..另外,我的代码中有一些红线。 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);
        }
    }
}

【问题讨论】:

    标签: android progress-bar android-asynctask


    【解决方案1】:

    问题在于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 });
    

    【讨论】:

      【解决方案2】:

      现在你可以这样称呼它 :: new syncEvent().execute();

      喜欢 ::

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

      【讨论】:

      • 可能是一种方法.. 这样做,我已经尝试过,但它不起作用我认为问题仍然存在,因为我在我的代码中看到红色下划线..在“onPostExecute”它通知构造函数 SimpleAdapter (EventsActivity.syncEvent, ArrayList>, int, String[], int[]) 未定义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2020-11-25
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多