Im пытается сделать проводник XML-файлов для устройств Android и в зависимости от того, какой файл пользователь выбирает, этот файл открывается и читается. Однако у меня возникает проблема при анализе XML-данных, и я отправляю эти значения классу, где показаны эти значения. У меня есть несколько списков для проанализированных значений, но значения хранятся только для первого файла чтения. Если я выбираю другие файлы, то в окне всегда отображаются те же самые значения (те, которые читаются впервые). Я думаю, что есть проблема, потому что я использую static для переноса этих значений между 2 классами, и новые значения никогда не сохраняются. Если это проблема, то может быть решением для передачи значений в эти 2 класса? Спасибо Вот код, где я разбираю разные файлы и сохраняю эти значения в списках.Android: Невозможно сохранить новые значения в Arraylists
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];
}
}
Как я извлечь ArrayLists в другой класс, как в следующих примерах:
PS1.setText(XMLPullParserHandler.getPS(0));
IR1.setText(XMLPullParserHandler.getIR(0));
Спасибо за ваше время
EDIT: Вот код, в котором новый экземпляр из XMLPullParserHandler генерируется в XMLPullParserActivity:
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();
}
}
}
MainActivity, когда я взываю к Разобрать() метод:
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);
}
Пожалуйста, попробуйте улучшить именование переменных. имена двух буквенных переменных считаются загадочными, и вы можете испортить 'ir' с' ip', не осознавая ... – WarrenFaith