Im разбор XML-файла. Мой обработчик XML, мой объект, который содержит Arraylist массивов, и основной класс, который запускает все и печатает его. Проблема в том, что каждый раз, когда я добавляю массив к моему arraylist, он изменяет все ранее добавленные массивы так же, как и текущие. Я думал, что это просто статическая проблема, но как только я взял статику из всего, что все еще делает то же самое. Помогите, пожалуйста, мне нужно сделать это как можно скорее.ArrayList массивов продолжает перезаписывать мои предыдущие массивы при добавлении самого нового массива
Вот мой обработчик:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyXMLHandler extends DefaultHandler {
public int counter = 0;
public String[] part = new String[4];
Boolean currentElement = false;
String currentValue = null;
public SitesList sitesList = null; /this used to be static
public SitesList getSitesList() { //this used to be static
return sitesList;
}
public void setSitesList(SitesList sitesList) { //this used to be static
MyXMLHandler handle = new MyXMLHandler(); //thats why the object
handle.sitesList = sitesList;
}
/**
* Called when tag starts (ex:- <name>text</name> -- <name>)
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentElement = true;
if (localName.equals("string-array")) {
/** Start */
String attr = attributes.getValue("name");
sitesList = new SitesList(attr);
}
}
/**
* Called when tag closing (ex:- <name>text</name> -- </name>)
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
/** set value */
if (counter == 4) {
sitesList.addPart(part);
counter = 0;
}
if (localName.equalsIgnoreCase("item")) {
part[counter] = currentValue;
counter++;
}
currentValue = "";
}
/**
* Called to get tag characters (ex:- <name>text</name> -- to get
* text Character)
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (currentElement) {
currentValue = new String(ch, start, length);
currentElement = false;
}
}
}
Вот мой SitesList объект
import java.util.ArrayList;
/** Contains getter and setter method for varialbles */
public class SitesList {
/** Variables */
private ArrayList<String[]> part = new ArrayList<String[]>();
/**
* In Setter method default it will return arraylist change that to add
*/
public SitesList(String c) {
String[] comp = new String[1];
comp[0] = c;
part.add(comp);
// company name is part(0)[0]
}
public String getCompany() {
return this.part.get(0)[0];
}
public ArrayList<String[]> getPart() {
return part;
}
public void addPart(String[] name) {
part.add(name);
}
public String getName(int i) {
return this.part.get(i)[0];
}
public String getComp1(int i) {
return this.part.get(i)[1];
}
public String getComp2(int i) {
return this.part.get(i)[2];
}
public String getComp3(int i) {
return this.part.get(i)[3];
}
public int getSize() {
return this.part.size();
}
}
Это слишком много кода для SO вопроса. Сократите это до абсолютного минимума, необходимого для выявления проблемы (пожалуйста, прочтите http://sscce.org). –
Извините, в первый раз LOL просто убедитесь, что было достаточно информации, чтобы решить. – chartle7
Эквивалентный вопрос задавался много раз. –