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

Здравствуйте все!

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

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

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

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

Все сделано с диалогами.

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

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

ОБНОВЛЕНИЕ 2 Это было долго, я выяснил проблему... на всякий случай, будьте очень осторожны с дескрипторами файлов, и на самом деле, для решения проблем EMPTY FILES не пишите: fos = openFileOutput(filename,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();     
        }
    });

0 ответов

Другие вопросы по тегам