Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:无法将新值存储到ArrayList中_Android_Static_Arraylist_Return - Fatal编程技术网

Android:无法将新值存储到ArrayList中

Android:无法将新值存储到ArrayList中,android,static,arraylist,return,Android,Static,Arraylist,Return,我正在尝试为Android设备创建一个XML文件浏览器,根据用户选择的文件,该文件将被打开和读取。但是,当我解析XML并将这些值发送到显示这些值的类时,我遇到了一个问题。我有一些解析值的列表,但是这些值只存储在第一个读取文件中。如果我选择另一个文件,窗口中总是显示相同的值(第一次读取的值)。我认为这是一个问题,因为我使用static在两个类之间传输这些值,并且从未存储新值。如果这是一个问题,那么将值传递到这两个类中的解决方案是什么?非常感谢。 下面是我解析不同文件并将这些值存储到列表中的代码 p

我正在尝试为Android设备创建一个XML文件浏览器,根据用户选择的文件,该文件将被打开和读取。但是,当我解析XML并将这些值发送到显示这些值的类时,我遇到了一个问题。我有一些解析值的列表,但是这些值只存储在第一个读取文件中。如果我选择另一个文件,窗口中总是显示相同的值(第一次读取的值)。我认为这是一个问题,因为我使用static在两个类之间传输这些值,并且从未存储新值。如果这是一个问题,那么将值传递到这两个类中的解决方案是什么?非常感谢。 下面是我解析不同文件并将这些值存储到列表中的代码

public class XMLPullParserHandler {
    static List<Puntuacion> puntuaciones;
    private static Puntuacion puntuacion;
    static List<String> nombres = new ArrayList<String>();
    static List<String> a = new ArrayList<String>();
    static List<String> e = new ArrayList<String>();
    static List<String> sr = new ArrayList<String>();
    static List<String> pc = new ArrayList<String>();
    static List<String> ps = new ArrayList<String>();
    static List<String> ir = new ArrayList<String>();
    static List<String> ip = new ArrayList<String>();
    static List<String> por = new ArrayList<String>();



    private static String text;

    public XMLPullParserHandler() {
        puntuaciones = new ArrayList<Puntuacion>();
    }

    public static 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("Nom_Test")) {
                        puntuacion.setValor((text));
                        nombres.add(text);
                    } else if (tagname.equalsIgnoreCase("NUMERO_ACIERTOS")) {
                        puntuacion.setValor_Transformado((text));

                        a.add(text);
                    } else if (tagname.equalsIgnoreCase("NUMERO_ERRORES")) {
                        puntuacion.setValor_PS((text));
                        e.add(text);


                } else if (tagname.equalsIgnoreCase("VALOR_PC")) {
                    puntuacion.setValor_PS((text));
                    pc.add(text);


                } else if (tagname.equalsIgnoreCase("VALOR_PS")) {
                    puntuacion.setValor_PS((text));
                    ps.add(text);


            } else if (tagname.equalsIgnoreCase("VALOR_IP")) {
                puntuacion.setValor_PS((text));
                ip.add(text);


        } else if (tagname.equalsIgnoreCase("VALOR_IR")) {
            puntuacion.setValor_PS((text));
            ir.add(text);

        }
        else if (tagname.equalsIgnoreCase("VALOR_POR")) {
            puntuacion.setValor_PS((text));
            por.add(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];
    }
    public  static String getE(int posicion){
        String[] ListE = new String[e.size()];
        ListE = e.toArray(ListE);
        return ListE[posicion];
    }
    public  static String getPC(int posicion){
        String[] ListPC = new String[pc.size()];
        ListPC = pc.toArray(ListPC);
        return ListPC[posicion];
    }
    public  static String getPS(int posicion){
        String[] ListPS = new String[ps.size()];
        ListPS = ps.toArray(ListPS);
        return ListPS[posicion];
    }
    public  static String getIP(int posicion){
        String[] ListIP = new String[ip.size()];
        ListIP = ip.toArray(ListIP);
        return ListIP[posicion];
    }
    public  static String getIR(int posicion){
        String[] ListIP = new String[ir.size()];
        ListIP = ir.toArray(ListIP);
        return ListIP[posicion];
    }
    public static String getP(int posicion){
        String[] ListIP = new String[por.size()];
        ListIP = por.toArray(ListIP);
        return ListIP[posicion];
    }

}
谢谢你抽出时间

编辑:以下是在XMLPullParserHandler中生成XMLPullParserHandler新实例的代码:

    public class XMLPullParserActivity {


        public static  void Parse(Context context){




            List<Puntuacion> puntuacion = null;
            try {
                XMLPullParserHandler parser = new XMLPullParserHandler();
                puntuacion = parser.parse(context.getAssets().open(MainActivity.fileName()));

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




    }

实际上,问题在于使用
静态
字段。加载
XMLPullParserHandler
类时,仅初始化一次
ArrayLists
。之后,您只需在这些列表上调用
add()
。因此,在解析新文件时,只需向以前的文件添加值。我建议您重新设计一下应用程序:

  • 重新编写
    XMLPullParserHandler
    以解析文件并返回自定义项的
    列表。它不应该存储任何信息,只是解析并返回
  • 每次需要解析文件时,创建
    XMLPullParserHandler
    的新实例,调用其
    parse()
    方法,该方法返回项目列表,然后显示这些项目

希望这有帮助。

请尝试改进变量命名。两个字母的变量名被认为是神秘的,你可能会把
ir
ip
搞得一团糟,而没有意识到……非常感谢你,伊戈尔,不过我有点迷路了。我编辑了一些东西,并在打开所选文件时创建了一个新的XML实例:xmlpullParseActivity.Parse(this);意图i=新意图(MainActivity.this,Correccion.class);星触觉(i)@Katherine99,您并不真正需要XMLPullParseActivity,更不用说它甚至不是一项活动。在MainActivity中创建一个XMLPullParserHandler的实例,并在那里调用它的parse()方法。抱歉,Egor,但我不知道怎么做,您的意思是将其写入MainActivity:XMLPullParserHandler Parser=new XMLPullParserHandler();Parser.parse();???非常感谢。again@Katherine99是的,你说得对。顺便说一句,在Java中以大写字母开头命名变量是不常见的,您应该只使用小写字母。
    public class XMLPullParserActivity {


        public static  void Parse(Context context){




            List<Puntuacion> puntuacion = null;
            try {
                XMLPullParserHandler parser = new XMLPullParserHandler();
                puntuacion = parser.parse(context.getAssets().open(MainActivity.fileName()));

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




    }
file = new File(path.get(position));
                file.getName();
                XMLPullParserHandler parser = new XMLPullParserHandler();

                XMLPullParserActivity.Parse(this);
                    Intent i = new Intent(MainActivity.this, Correccion.class);
                     startActivity(i);





}