Нужна помощь для XmlPullParser Android

Всем привет !

В настоящее время я разрабатываю приложение для Android (новичок), и мне нужно управлять файлами xml, действительно, мне нужно сохранять какие-то «циклы», созданные пользователем. Поэтому мне нужно сохранить и загрузить эти циклы из xml-файлов.
Что такое цикл?
Простой, он состоит из нескольких «шагов», каждый шаг содержит 4 элемента: «num_act», «nb_cm», « закуски», «вылазки». (Извините, но некоторые части моего кода на французском, etape = step, entrees = inputs, sorties = outputs).

Я пытался реализовать это и много искал на некоторых страницах, например: Создать xml файл и сохранить его во внутренней памяти андроида, но на самом деле он не работает и я не могу разобраться в проблемах:

  • Я не могу открыть сохраненный файл даже с помощью другого apk ("исходный файл не найден"), поэтому я не могу его проверить UPDATE => Все в порядке, теперь я сохраняю все свои файлы в хранилище SD.
  • файлы, которые я пытаюсь прочитать во время загрузки, кажутся почти пустыми

    Поэтому мне было интересно, не могли бы вы мне помочь, пожалуйста.

Все делается с помощью диалогов.

Много ли ошибок при объявлении парсера или других элементов, спасибо?

ОБНОВЛЕНИЕ Я все еще ищу и понял, что проблема в том, что созданный файл xml ВСЕГДА ПУСТОЙ. Я пробовал много вещей (строковый писатель и т. Д., ....).

ОБНОВЛЕНИЕ 2 Я долго разбирался в проблеме... на всякий случай, будьте очень осторожны с файловыми дескрипторами, и вообще, для решения проблем с ПУСТЫМИ ФАЙЛАМИ не пишите :fos= openFileOutput(имя файла,Context.MODE_APPEND); // НЕТ НЕТ НЕТ : MODE_APPEND приводит к ПУСТЫМ ФАЙЛАМ

СОХРАНИТЬ ЦИКЛ В ФАЙЛЕ XML:

/***Saving in a file******************/
        button_save.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.save_cycle);
            dialog.setTitle("Save of the cycle");

            final EditText nom_cycle = (EditText) dialog.findViewById(R.id.nom_cycle);
            final Button save2 = (Button) dialog.findViewById(R.id.save);

            /*****Save all the steps*****/
            save2.setOnClickListener(new OnClickListener(){
                @SuppressWarnings("resource")
                @Override
                public void onClick(View v) {
                    String filename = nom_cycle.getText().toString(); 
                    File f = new File(getFilesDir(),filename + ".xml");
                    FileOutputStream fos;
                    try {
                        fos = new FileOutputStream(f);
                        fos = openFileOutput(filename,Context.MODE_APPEND); //NO NO NO MODE APPEND leades TO EMPTY FILES
                        XmlSerializer serializer = Xml.newSerializer();

                        serializer.setOutput(fos, "UTF-8");

                        serializer.startDocument(null, Boolean.valueOf(true));

                        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

                        for(int j = 0 ; j < c.liste_etapes.size() ; j++)
                        {
                            serializer.startTag("", "etape");

                            serializer.startTag("", "num_act");
                            serializer.text(Integer.toString(c.liste_etapes.get(j).getNumero_act()));
                            serializer.endTag("", "num_act");

                            serializer.startTag("", "nb_cm");
                            serializer.text(Integer.toString(c.liste_etapes.get(j).getNbCm()));
                            serializer.endTag("", "nb_cm");

                            serializer.startTag("", "entrees");
                            serializer.text(c.liste_etapes.get(j).getEntrees().toString());
                            serializer.endTag("", "entrees");

                            serializer.startTag("", "sorties");
                            serializer.text(c.liste_etapes.get(j).getSorties().toString());
                            serializer.endTag("", "sorties");

                            serializer.endTag("", "etape");
                        }
                        //writer.toString();
                        //String dataWrite = writer.toString();
                        //fos.write(dataWrite.getBytes());

                        serializer.endDocument();
                        serializer.flush();
                        fos.close();
                    }
                    catch (Exception e) {
                        throw new RuntimeException(e);
                    } 
                    dialog.dismiss();

                }
            });
            dialog.show();
        }
    });

ЗАГРУЗКА ИЗ XML-ФАЙЛА

 load.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.load_cycle);
            dialog.setTitle("Liste des cycles sauvegardés : ");
            final ArrayList<String> FilesInFolder = GetFiles(getFilesDir().toString()); 
            ListView lv = (ListView) dialog.findViewById(R.id.files);


            lv.setAdapter(new ArrayAdapter<String>(context,
                    android.R.layout.simple_list_item_1, FilesInFolder));

            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    FileInputStream fis;
                    InputStreamReader isr;

                    int eventType = 0;
                    XmlPullParser xpp = null;
                    ArrayList<String> tmp_list = new ArrayList<String>();
                    try{
                        //get filename
                        final String xmlFile = FilesInFolder.get(position);                         
                        //preparing lecture in the file
                        fis = getApplicationContext().openFileInput(xmlFile);
                        isr = new InputStreamReader(fis);
                        char[] inputBuffer = new char[fis.available()];
                        isr.read(inputBuffer);
                        String data = new String(inputBuffer); //on lira ici pour les données par la suite
                        isr.close();
                        fis.close();

                        //declaration of xml parser 
                        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                        factory.setNamespaceAware(true);
                        xpp = factory.newPullParser();

                        //stream given to the parser
                        xpp.setInput( new StringReader (data) );
                        //get the first elements of the xml file
                        eventType = xpp.getEventType();

                    }

                    catch (IOException e) {
                        e.printStackTrace();
                    } catch (XmlPullParserException e) {
                        e.printStackTrace();
                    }

                    String num_act = "", nb_cm = "", entrees= "", sorties= "";
                    Cycle loaded_cycle = new Cycle();


                    while (eventType != XmlPullParser.END_DOCUMENT){
                        String name = xpp.getName();
                           switch (eventType){
                                case XmlPullParser.START_TAG:
                                    break;
                                case XmlPullParser.END_TAG:
                                    break;
                                case XmlPullParser.TEXT:
                                    if(name.equals("nb_act")){
                                        num_act = xpp.getText();
                                    }
                                    if(name.equals("nb_cm")){
                                        nb_cm = xpp.getText();
                                    }
                                    if(name.equals("entrees")){
                                        entrees = xpp.getText();
                                    }
                                    if(name.equals("sorties")){
                                        sorties = xpp.getText();
                                    }
                                    break;
                           }
                        try{
                            //we continue PARSING the file
                            eventType = xpp.next();
                        }
                        catch (XmlPullParserException e) {
                            e.printStackTrace();
                        }catch (IOException e) {
                            e.printStackTrace();
                        } 
    //just some tests of creating a step

                        int nact = 0, ncm = 0;
                        if(num_act != "") nact = Integer.valueOf(num_act);
                        if(nb_cm != "") ncm = Integer.valueOf(nb_cm);
                        Etape loaded_etape = new Etape(nact, ncm, new ArrayList<Integer>(),new ArrayList<Integer>());
                        loaded_cycle.ajouterEtape(loaded_etape);

                    }
                    c = loaded_cycle;

                    dialog.dismiss();
                }


            });
            dialog.show();     
        }
    });

person Youri    schedule 08.05.2014    source источник