# StringArrays aus ArrayList holen ?



## Kuniberd (30. April 2004)

Servus Leute,

ich wollte mich als erstes einaml für diese super Forum bedanken. Es hat mir bis jetzt immer sehr weitergeholfen. Jetzt stehe ich leider vor einem Problem, wo ich einfach nicht weiter komme. Vielleicht könnt ihr mir ja helfen.

Mein Problem:
Es geht darum, daß ich Daten aus einem JTable herausholen möchte und in eine XML-Datei speichern möchte. Das funktioniert auch schon ganz gut. Nur leider bekomme ich immer die selben Artikel in der XML-Datei. Ich habe aber z.B. 3 unterschiedliche Artikel. Es steht aber dreimal der selbe drin.

So füge ich die Daten in eine ArrayList:

        javax.swing.table.TableModel model = jTable1.getModel();
        ArrayList artikelListe = new ArrayList();
        String[] singleArtikel = new String[5];
        for(int i = 0 ; i < jTable1.getRowCount(); i++){

            singleArtikel[0] = model.getValueAt(i,0).toString();
            singleArtikel[1] = model.getValueAt(i,1).toString();
            singleArtikel[2] = model.getValueAt(i,2).toString();
            singleArtikel[3] = model.getValueAt(i,3).toString();
            singleArtikel[4] = model.getValueAt(i,4).toString();

            artikelListe.add(i, singleArtikel);

        }
angebot_main_frame.saveAngebotXML(artikelListe, file);

Anschliessend hole ich mir die Daten wie folgt zurück:

public void saveAngebotXML(ArrayList offerArticles, File file){

        try{
            if(file.exists() == false){
                file.createNewFile();
            }           


            Document doc = new Document();
            Element rootElement = new Element("root");
            doc.setRootElement(rootElement);
            for(int i = 0; i < offerArticles.size(); i++){
                Element childElement = new Element("article");
                childElement.setAttribute("Nr.", String.valueOf(i));
                rootElement.addContent(childElement);


                String[] article = (String[]) offerArticles.get(i);
                //System.out.println(offerArticles.get(i));

                    Element child1Element = new Element("articlenumber");
                    child1Element.addContent(article[0].toString());
                    childElement.addContent(child1Element);


                    Element child2Element = new Element("Bezeichnung");
                    child2Element.addContent(article[1].toString());
                    childElement.addContent(child2Element);


                    Element child3Element = new Element("EK-Netto");
                    child3Element.addContent(article[2].toString());
                    childElement.addContent(child3Element);


                    Element child4Element = new Element("VK-Netto");
                    child4Element.addContent(article[3].toString());
                    childElement.addContent(child4Element);


                    Element child5Element = new Element("Langtext");
                    child5Element.addContent(article[4].toString());
                    childElement.addContent(child5Element);

            }
            XMLOutputter outputter = new XMLOutputter(" ", true);
            FileOutputStream output = new FileOutputStream(file);
            outputter.output(doc, output);
 }
        catch(IOException ef){ef.printStackTrace();}

Es scheind so als ob das "String[] article = (String[]) offerArticles.get(i);" in der Schleife nicht richtig aktualisiert wird. Ich komme da aber nicht weiter.
Ich habe auch noch keine richtige Möglichkeit gefunden die Objekte aus der ArrayList  wieder zurück in ein StringArray zu stecken.  Ist das so überhaupt richtig ?

Der Part mit dem XML funktioniert auch hervorragend.(Hab ich auch aus dem Forum   )

Vielen Dank schon im voraus.


----------



## Christian Fein (30. April 2004)

Also ich hab nicht sooo ganz kapiert wo genau das Problem liegt 

Aber eine hilfe kann ich dir schon geben.
Eine ArrayList in ein Array zu wandeln:


```
List list = new  ArrayList();
list.add("bla"); list.add("blub");

String[] arr  = new String[list.size()];
arr = list.toArray(arr);
```


----------



## Kuniberd (30. April 2004)

Vielen Dank  für die schnelle Antwort !

Oh ja hab ich wohl etwas unverständlich ausgedrückt .

:-( 


Es ist so, daß wenn ich die einzelnen Artikel(StringArrays)(z.B. drei Stück) in die ArrayList schiebe und dann in der Schleife raushole und dann ins xml schreibe hab ich im xml-file dreimal den letzten Artikel. Und nicht alle drei.

z.B. so:

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <article Nr.="0">
  <articlenumber>558ZA09</articlenumber>
  <Bezeichnung>Sony Memory Stick 128MB</Bezeichnung>
  <EK-Netto></EK-Netto>
  <VK-Netto>59.03</VK-Netto>
  <Langtext></Langtext>
 </article>
 <article Nr.="1">
  <articlenumber>558ZA09</articlenumber>
  <Bezeichnung>Sony Memory Stick 128MB</Bezeichnung>
  <EK-Netto></EK-Netto>
  <VK-Netto>59.03</VK-Netto>
  <Langtext></Langtext>
 </article>
 <article Nr.="2">
  <articlenumber>558ZA09</articlenumber>
  <Bezeichnung>Sony Memory Stick 128MB</Bezeichnung>
  <EK-Netto></EK-Netto>
  <VK-Netto>59.03</VK-Netto>
  <Langtext></Langtext>
 </article>
</root>


----------



## Christian Fein (30. April 2004)

```
for(int i = 0 ; i < jTable1.getRowCount(); i++){

//Gib mal aus:
System.out.println(model.getValueAt(i,0).toString());

singleArtikel[0] = model.getValueAt(i,0).toString();
singleArtikel[1] = model.getValueAt(i,1).toString();
singleArtikel[2] = model.getValueAt(i,2).toString();
```

Sieht so aus als sind deine Daten im model falsch. Denn im Nachfolgenden konnte ich beim überfliegen des Codes keinen Fehler erkennen.


----------



## Kuniberd (30. April 2004)

Die Ausgabe sieht so aus

G06Z065
5386572
558ZA09


Das sind die drei Artikelnummern aus dem Model.
Das hab ich auch schon mal gemacht.

Wenn ich aber mal die ArrayListe ausgebe(ist klar gibt ja keinen String), aber es ist dreimal das selbe. Das dürfte aber eigentlich ja nicht sein oder ?

for(int i = 0; i < offerArticles.size(); i++){
                Element childElement = new Element("article");
                childElement.setAttribute("Nr.", String.valueOf(i));
                rootElement.addContent(childElement);
                //Object objArticle = offerArticles.get(i);

                System.out.println(offerArticles.get(i));

}

[Ljava.lang.String;@878c4c
[Ljava.lang.String;@878c4c
[Ljava.lang.String;@878c4c

Müsste doch dreimal etwas anderes sein.

Ich glaube, daß Problem liegt hierdrin.

String[] article = (String[]) offerArticles.get(i);


Wie kann man das anders Lösen ? Oder überhaupt anders. Vielleicht ohne ArrayList?


----------



## Kuniberd (30. April 2004)

Ich hab das jetzt mal geändert und mit einem zweidemensionalen Array probiert.
Damit funkioniert es.
Es ärgert mich trotzdem, daß das mit der Arraylist nicht klappt.

Ich will damit sagen, daß du bitte keinen Aufwand betreiben sollst.

Wenn es zu komplex wird dann lasse ich es einfach mit dem zweidimensionalen Array. 
Vielleicht habe ich da nur einen Denkfehler drin.


----------



## Christian Fein (30. April 2004)

> _Original geschrieben von Kuniberd _
> *Ich hab das jetzt mal geändert und mit einem zweidemensionalen Array probiert.
> Damit funkioniert es.
> Es ärgert mich trotzdem, daß das mit der Arraylist nicht klappt.
> ...



Geht auch mit der ArrayList, hattest irgendwo einen Fehler.

Setze mal statt:

artikelListe.add(i, singleArtikel);

artikelListe.add(singleArtikel);

dann sollte es gehen.


----------



## Kuniberd (30. April 2004)

> Geht auch mit der ArrayList, hattest irgendwo einen Fehler.
> 
> Setze mal statt:
> 
> ...



Leider geht das auch nicht. 


Aber ist auch wurscht. Ich mach das mit den zweidimensionalen Arrays.

Vielen Dank für deine Mühe. Aber ich habe bestimmt irgendwann nochmal ein paar Fragen.   

Ah auch noch danke für den Tipp mit dem umwandeln in Arrays.


----------

