1

「内部ストレージ」の方法を使用してデータを保持しようとしています。以下のコードでは、xml をストレージに書き込もうとしています。それは正しい方法ですか?fileInputStream を使用してこのファイルを開こうとしていますが、読み取り用に表示されるそのクラスの唯一の関数は、一度に 1 バイトのデータを読み取るように見える .read() です。これは、xml ファイルを読み取るにはかなり不便なようです。データの読み書きはどのようにすればよいですか?

   @Override
    protected void onDestroy() {
        super.onDestroy();
        try {
             FileOutputStream fos=openFileOutput(LOCALSTORAGEFILE,Context.MODE_PRIVATE);
             XmlCreator create=new XmlCreator();
             fos.write(create.subjectListToXml(subjectMasterList).getBytes());
             fos.close();

        } catch (IOException ex) {
            Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);     
        }

public class XmlCreator {
    XmlSerializer serializer=Xml.newSerializer();
    StringWriter writer=new StringWriter();

    public String subjectListToXml(ArrayList<Subject> masterList){
        try{
            serializer.setOutput(writer);
            serializer.startDocument("UTF-8", true);
            serializer.startTag("", "subjects");
            serializer.attribute(null, null, null);
            for(Subject subject:masterList){
                serializer.endTag("","subject");
                for(Cards card:subject.getCards()){
                    serializer.startTag("","card");
                     serializer.startTag("","word");
                     serializer.text(card.getCardFront());
                     serializer.endTag("","word");
                    serializer.endTag("", "card");
                }
                serializer.endTag("", "subject");
            }
                serializer.endTag("","subjects");
                serializer.endDocument();

        }catch(Exception e){
            e.printStackTrace();
        }
        return writer.toString();
    }
}
4

1 に答える 1

1

物事を再発明する必要はありません。SharedPreferencesの使用を検討してください。

XML 形式を引き続き使用し、適切な方法で読みたい場合は、次の方法で開始できます。

InputStream is = ...
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
doc.getDocumentElement().normalize();
NodeList myTags = doc.getElementsByTagName("your_xml_tag");

XML/JSON ライブラリのJacksonも強くお勧めします。わずか数行のコードを使用して、完全なオブジェクトを読み取って保存できます。

于 2013-01-21T01:32:36.397 に答える