0

こんにちは、いくつかの XML ファイルを表示するために使用するファイル エクスプローラーを設計しました。選択したファイルに応じて、1 つまたは別の XML を開きます。今のところ問題はまったくなく、XMLPullParser の助けを借りて、属性からのテキストをいくつかの ArrayList に挿入します。問題は、戻って別の XML ファイルを選択すると、これらの値が次の XML と同じになり、次の XML で発生することです。問題は、新しいインスタンスが呼び出されると、arrayLists が空にならないことだと思います。

これがどのように機能するかは次のとおりです。 FileExporer でファイルを表示し、任意のユーザーをクリックします。

public class MainActivity extends ListActivity {

    private List<String> item = null;
    private List<String> path = null;
    private String root;
    private TextView myPath;
    static File file;
    static String texto;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myPath = (TextView)findViewById(R.id.path);

        root = Environment.getExternalStorageDirectory().getPath();

        getDir(root);
    }

    private void getDir(String dirPath)
    {
        myPath.setText("Location: " + dirPath);
        item = new ArrayList<String>();
        path = new ArrayList<String>();
        File f = new File(dirPath);
        File[] files = f.listFiles();

        if(!dirPath.equals(root))
        {
            item.add(root);
            path.add(root);
            item.add("../");
            path.add(f.getParent());    
        }

        for(int i=0; i < files.length; i++)
        {
            File file = files[i];

            if(!file.isHidden() && file.canRead() && (file.getName().endsWith("xml"))){

                path.add(file.getPath());
                if(file.isDirectory()){
                    item.add(file.getName() + "/");
                }else{
                    item.add(file.getName());

                } 
            }   
        }

        ArrayAdapter<String> fileList =
                new ArrayAdapter<String>(this, R.layout.row, item);
        setListAdapter(fileList);   
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
         file = new File(path.get(position));

        if (file.isDirectory())
        {
            if(file.canRead()){
                getDir(path.get(position));
            }else{
                new AlertDialog.Builder(this)
                    .setIcon(R.drawable.ic_launcher)
                    .setTitle("[" + file.getName() + "] folder can't be read!")
                    .setPositiveButton("OK", null).show();  
            }   
        }else {
            file = new File(path.get(position));
            file.getName();

            XMLPullParser.Parse(this);
            texto = XMLPullParserHandler.getA(0);
        }

            Parseo();
                Intent i = new Intent(MainActivity.this, Correccion.class);
                                     startActivity(i);
                 MainActivity.this.finish();

          }

    public void Parseo(){

    }

    public static String fileName(){
        return file.getName();
    }
    public static String getText(){
        return texto;
    }

}

XMLPullParser: 読み取る必要があるファイルを示し、XMLPullParserHandler の新しいインスタンスを呼び出します。

public class XMLPullParser{
    static String Fichero;
     public static void Parse(Context context){





            try {
                List<Puntuacion> puntuacion;
                XMLPullParserHandler parser = new XMLPullParserHandler();
                File dir = Environment.getExternalStorageDirectory();
                File yourFile = new File(dir, MainActivity.fileName());
                FileInputStream iStream =  new FileInputStream(yourFile);

                puntuacion = parser.parse(iStream);

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

XMLPullParserHandler: ArrayLists にテキストを作成して追加するときに、ここに問題があると思います: たとえば、この場合、ArrayList a

public class XMLPullParserHandler {

   List<Puntuacion> puntuaciones;

    private  Puntuacion puntuacion;

    static List<String> nombres = new ArrayList<String>();
    static List<String> a = new ArrayList<String>();



    private  String text;

    public XMLPullParserHandler() {
    //  puntuaciones.clear();
      //  puntuaciones.removeAll(puntuaciones);
        puntuaciones = new ArrayList<Puntuacion>();
       ;
    }

    public  List<Puntuacion> getPuntuacion() {
        return puntuaciones;
    }

    public List<Puntuacion> parse(InputStream is) {
        XmlPullParserFactory factory = null;
        XmlPullParser parser = null;
        try {

            factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            parser = factory.newPullParser();

            parser.setInput(is, null);

            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagname = parser.getName();
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    if (tagname.equalsIgnoreCase("TEST")) {
                        // create a new instance of puntuacion



                        puntuacion = new Puntuacion();




                    }
                    break;

                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;

                case XmlPullParser.END_TAG:
                    if (tagname.equalsIgnoreCase("TEST")) {

                        puntuaciones.add(puntuacion);

                    } else if (tagname.equalsIgnoreCase("NUMERO_ACIERTOS")) {
                        puntuacion.setValor_Transformado((text));

                        a.add(text);
                        Log.i("ii", text);

        }
                    break;

                default:
                    break;
                }
                eventType = parser.next();
            }

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

        return puntuaciones;
    }






    public static String getNombre(int posicion){
        String[] ListN = new String[nombres.size()];
        ListN = nombres.toArray(ListN);
        return ListN[posicion];
    }
    public static String getA(int posicion){
        String[] ListA = new String[a.size()];
        ListA = a.toArray(ListA);
        return ListA[posicion];
    }

}

For example if I have in this case a XML with **<NUMERO_ACIERTOS>1</NUMERO_ACIERTOS>** and after this I read another one with **<NUMERO_ACIERTOS>3</NUMERO_ACIERTOS>**  in my UI I only see the value **1** because is the first that has been loaded into the arraylist.

お時間とご注意いただきありがとうございます。

4

1 に答える 1