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 に答える