1

朋友们,我在从位于 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 或屏幕上看不到任何东西。请使用片段帮助我获取相同的代码。谢谢

4

1 回答 1

1

在我看来,您的处理程序实际上从未将记录添加到数组中 - 看起来您需要为“记录”类型的 endElement 包含一个操作,将其添加到数组中。

另外,正如 Giovanni 所说,这整段代码将占用 UI 线程,因此如果 XML 文件不重要,则应在带有进度对话框的单独线程中处理。

于 2012-08-13T08:05:42.963 回答