Android:显示加载图片,同时检查&下载xml文件

时间:2014-03-14 14:39:29

标签: android xml loading

这是我的代码,用于检查互联网并下载XMl并在ListView中显示 我想要的是,在加载XML时,显示我的自定义layout或显示加载图片。 如果我应该使用AsynceTask,请解释如何。谢谢。

       ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_ITEM);
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap

            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_ID, parser.getValue(e, KEY_ID));
            map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
            map.put(KEY_COST, parser.getValue(e, KEY_COST));
            map.put(KEY_DESC, parser.getValue(e, KEY_DESC));

            // adding HashList to ArrayList
            menuItems.add(map);
        }

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, menuItems,
                R.layout.list_item,
                new String[] { KEY_COST,KEY_NAME,KEY_DESC,KEY_ID},     new int

[] {
                                R.id.cost,R.id.name,R.id.desciption,R.id.linke});


        setListAdapter(adapter);

2 个答案:

答案 0 :(得分:1)

是的,AsyncTask对此有好处。

  1. onPreExecute()中加载时显示您想要的任何图像/布局。如果您愿意,可以使用ProgressDialog / ProgressBar或在此处显示其他内容。
  2. doInBackground()
  3. 中进行解析
  4. 然后关闭您的ProgressDialog / ProgressBar,图片或您在onPostExecute()中决定使用的任何内容。另外,请使用此方法更新Adapter
  5. 如果您在其他任何地方都不需要,AsyncTask可以使Activity成为您{{1}}的内部课程。
  6. 请务必仔细阅读AsyncTask Docs几次,了解它们的工作原理。

    Here is an example of setting up an AsyncTask

答案 1 :(得分:0)

@Override
    protected void onPreExecute() {
        super.onPreExecute();

 progress = ProgressDialog.show(activity, activity.getString(R.string.spinner_title), activity.getString(R.string.spinner_message_retrieving), true);}

 @Override
    protected void doInBackground() {
        super.onPreExecute();
// do here network stuff
}
 protected void onPostExecute(Void result) {      
progress.dismiss();}

这是你的asynctask方法的一部分