Anfängerproblem: String Array als Rückgabewert

  • Antworten:4
  • Bentwortet
Michael H.
  • Forum-Beiträge: 17

14.09.2012, 13:20:11 via Website

Hallo zusammen,

ich habe in meine App einen SAX XML-Parser implementiert, welcher so weit auch super funktioniert. Nur steh ich grad aufm Schlauch und bekomme die Daten nicht aus meiner Funktion raus, so dass ich diese in meiner Activity nutzen kann...

Hier die Methode:
[code]public void parseXML() {

String parsedData = "";

try {

Log.w("AndroidParseXMLActivity", "Start");
/** Handling XML */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();

XMLContentHandler myXMLHandler = new XMLContentHandler();
xr.setContentHandler(myXMLHandler);

AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
inputStream = assetManager.open("calimero.xml");
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
xr.parse(new InputSource(inputStream));

ArrayList<Datapoint> itemsList = myXMLHandler.getItemsList();
int datapoint_size = itemsList.size();
String xml_names[] = new String [datapoint_size];
String xml_states[] = new String [datapoint_size];
String xml_dptIDs[] = new String [datapoint_size];
String xml_groupadresses[] = new String [datapoint_size];
String xml_mainNumbers[] = new String [datapoint_size];
String xml_priority[] = new String [datapoint_size];

for(int i=0;i<itemsList.size();i++){
Datapoint item = itemsList.get(i);
parsedData = parsedData + "----->\n";
parsedData = parsedData + "Name: " + item.getName() + "\n";
xml_names[i] = item.getName();
parsedData = parsedData + "stateBased: " + item.getStateBased() + "\n";
xml_states[i] = item.getStateBased();
parsedData = parsedData + "mainNumber: " + item.getMainNumber() + "\n";
xml_mainNumbers[i] = item.getMainNumber();
parsedData = parsedData + "dptID: "+ item.getDptID() + "\n";
xml_dptIDs[i] = item.getDptID();
parsedData = parsedData + "Groupadress: "+ item.getGroupadress() + "\n";
xml_groupadresses[i] = item.getGroupadress();
parsedData = parsedData + "priority: "+ item.getPriority() + "\n";
xml_priority[i] = item.getPriority();
}
//TODO die Werte auch außerhalb der Methode verfügbar machen
Log.w("AndroidParseXMLActivity", "Done");
}
catch (Exception e) {
Log.w("AndroidParseXMLActivity",e );
}
}
[/code]

Wie kann ich nun von außerhalb auf z.B auf das xml_names Array zugreifen? Ich muss es doch irgendwie über den Rückgabewert der Funktion machen, aber alle Versuche dies zu implementieren sind bis jetzt gescheitert...

Bitte helft mir, ist ja doch "nur" ein Java Grundlagen Problem..

Danke und Gruß,
Michael

— geändert am 14.09.2012, 13:36:13

Antworten
Florian B.
  • Forum-Beiträge: 284

14.09.2012, 15:13:06 via Website

Dein Problem ist, dass du deine Daten aus der XML Datei in mehrere Array schreibst, die Methode aber nur ein Objekt zurück geben kann.

Ich nehme mal an, dass eigentlich immer jeweils Eintrag aus jedem deiner Arrays zusammengehört. Also Ein Eintrag hat einen Name, State, Groupaddress usw. Da die Werte also zusammen gehören, sollten sie auch alle zusammen in ein Objekt gesteckt werden. Die Objekte wiederum steckst du dann in ein Array und das gibt deine Funktion zurück.

Also implementierst du dir beispielsweise eine Klasse "Entry", die die Felder "Name", "State", "Groupaddress" etc. hat. Vor der Schleife, da wo du deine String Arrays erstellst, erstellst du stattdessen ein Array des Typs "Entry" Beim Durchlauf deiner Schleife erstellst du dir dann ein Objekt Entry und schreibst und schreibst die Werte aus dem XML in die entsprechenden Felder. Am Ende der Schleife fügst du dann dem Array das Objekt zu. Und am Ende gibt deine Funktionen dann das Array zurück.

Michael H.

Antworten
Michael H.
  • Forum-Beiträge: 17

14.09.2012, 15:18:13 via Website

Hallo,

erstmal danke für die Rückmeldung.

Ich habe bereits eine solche Klasse und zwar die Klasse "Datapoints" aus der auch die Array List besteht, hier ein Auszug davon:
1public class Datapoint {
2
3 private String stateBased;
4 private String name;
5 private String priority;
6 private String mainNumber;
7 private String groupadress;
8 private String dptID;
9
10
11 public Datapoint() {
12 }
13
14 public String getMainNumber() {
15 return mainNumber;
16 }
17
18 public void setMainNumber(String mainNumber) {
19 this.mainNumber = mainNumber;
20 }

Durch die for-Schleife erhalte ich ja immer jeweils genau ein Objekt mit allen wichtigen Feldern. Ich weiß nur nicht, wie ich diese dann rausbekomme...

Antworten
Michael H.
  • Forum-Beiträge: 17

14.09.2012, 15:39:57 via Website

Hab das Problem nun gelöst, habe als Rückgabewert Datapoint angegeben und mit return das erzeugte item zurückgegeben. Dann kann ich in der Main-Funktion mit z.B. item.getName() den String auslesen.

Antworten
Florian B.
  • Forum-Beiträge: 284

14.09.2012, 15:40:46 via Website

Ah jetzt, die Zeile hatte ich übersehen.

Dann verstehe ich gerade nicht warum du alles noch in Arrays schreibst. du hast doch schon ein Array in dem alle deine Einträge liegen, gibt das doch zurück.

Oder was genau willst du denn mit deinen Einträgen machen? Vielleicht erklärst du das erst mal, dann kann man besser helfen.

Antworten