私はImageManager
のメソッドaddImage
を作成して、Picture
クラスのインスタンスを作成し、それをArrayList
に追加しました。 imageManager.addImage("title,image,"Arizona","a;ldkjsf;kasjdf");
を使用してrun
クラスから画像を追加するとうまくいきます。インスタンスが配列リストに格納されていません
しかし、あなたがParser
クラスからの画像を、画像を追加するときImageManager
クラスのArrayList
はaddImage
方法とgetImages
メソッドの呼び出しの間Parser
クラスから作成されたイメージを失うが、MainViewController
クラスによって作成されたインスタンスを失うことはありません。 。なぜこれをやっているのですか?どうすれば修正できますか?
public class Run {
public static void main(String[] args){
Parser parser = new Parser();
ImageManager imageManager = new ImageManager();
imageManager.addImage("title", "location","description");
parser.parsePictureData();
imageManager.getImages();
}
}
public class Parser {
ImageManager imageManager = new ImageManager();
Document document;
public void parsePictureData() {
try{
readXMLFile();
readImageFromDocument();
}catch(IOException e){
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
private void readXMLFile() throws IOException, SAXException, ParserConfigurationException {
File file = new File(System.getProperty("user.dir")+"/src/"+"test.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(file);
}
private void readImageFromDocument() {
NodeList pictureNodes = document.getElementsByTagName("picture");
for(int i = 0; i<pictureNodes.getLength();i++){
Node pictureNode = pictureNodes.item(i);
if(pictureNode.getNodeType()==Node.ELEMENT_NODE){
Element pictureElement = (Element) pictureNode;
String location =pictureElement.getAttribute("location");
String imagePath = pictureElement.getElementsByTagName("path").item(0).getTextContent();
String title = pictureElement.getElementsByTagName("title").item(0).getTextContent();
String description = pictureElement.getElementsByTagName("description").item(0).getTextContent();
imageManager.addImage(title,location,description);
}
}
}
}
public class ImageManager {
ArrayList<Pictures> images = new ArrayList<>();
public void addImage(String title, String location, String description){
Pictures newImage = new Pictures(title, location, description);
images.add(newImage);
System.out.println("1"+images);
}
public ArrayList<Pictures> getImages(){
System.out.println("2"+images);
return images;
}
}
public class Pictures{
private String title;
private String location;
private String description;
public Pictures(String title, String location, String description){
this.title = title;
this.location = location;
this.description = description;
}
}
MVCE(最小限の検証可能な完全な例)はより良いでしょう – efekctive
@efecctive FYI [mcve]を取得するために[mcveの周りに置くことができます] –
MCVE – goobs14