从SD卡上的XML文件读取时出现问题

时间:2012-08-13 06:46:24

标签: android xml

朋友们,我在从SD卡上的xml文件中读取信息时遇到了一个问题。代码正在成功实现,但在logcat上没有显示任何内容,也没有异常弹出。请帮助我。

public class History extends Activity
{
    private ListView lstv;

    static ArrayList<Records> arr;

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        setContentView(R.layout.history);

        try {


            String path = Environment.getExternalStorageDirectory()+"/saved_images/history.xml"; 
            File file = new File(path);
            SAXParserFactory factory=SAXParserFactory.newInstance();
            SAXParser parser=factory.newSAXParser();
            XMLReader reader=parser.getXMLReader();

            XMLHandler handler=new XMLHandler();

            //parser.parse(stream,handler);
            reader.parse(new InputSource(new InputStreamReader(new FileInputStream(file))));

            arr=handler.getArray();

            ArrayAdapter<Records> adpt=new ArrayAdapter<Records>(this, android.R.layout.simple_list_item_1,arr);
            //lstv.setAdapter(adpt);                    

            handler.startDocument();

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    class XMLHandler extends DefaultHandler {

        ArrayList<Records> array;
        Records records ;
        String strCurrentValue = null;

        public ArrayList<Records> getArray() {
            return array;
        }

        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            array=new ArrayList<Records>();
        }

        @Override
        public void startElement(String uri, String elementName, String qName,Attributes attributes) throws SAXException {
            super.startElement(uri, elementName, qName, attributes);

            if(elementName.equals("Record"))
            {
                records=new Records();
            }
        }

        @Override
        public void characters(char[] ch, int start, int length)
        throws SAXException {
            super.characters(ch, start, length);

            strCurrentValue=new String(ch, start, length);
        }

        @Override
        public void endElement(String uri, String elementName, String qName)
        throws SAXException {
            super.endElement(uri, elementName, qName);
            if(elementName.equals("date"))
            {
                records.date=strCurrentValue;
            }else if(elementName.equals("cc"))
            {
                records.cc=strCurrentValue;
            }

        }

        @Override
        public void endDocument() throws SAXException {
            super.endDocument();

            for(Records c:array)
            {
                Log.d("XmlHandler", c.toString());
            }
        }
    }
}

我无法在log-cat或屏幕上看到任何内容。请使用代码段帮助我获取相同的代码。 谢谢

1 个答案:

答案 0 :(得分:1)

在我看来,你的处理程序从未真正将记录添加到数组中 - 看起来你需要为“Record”类型的endElement包含一个动作,它将它添加到数组中。

同样,Giovanni说这整段代码都会占用UI线程,所以如果XML文件不重要,那么应该在一个带有进度对话框的单独线程中处理。