0

嗨,我设计了一个文件资源管理器,我用它来显示一些 XML 文件,并根据所选的文件打开一个 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 中

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

1

没有我古斯坦埃斯托斯:

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

它们不应该是静态的,并且可能应该是私有的:

private List<String> nombres;
private List<String> a;

我认为当您像这样开始解析时应该创建新的:

public List<Puntuacion> parse(InputStream is) {
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;
    nombres = new ArrayList<String>();
    a = new ArrayList<String>();
    try {

¡

于 2013-04-12T06:10:58.680 回答