1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. J4y, 23.08.2011 #1
    J4y

    J4y Threadstarter Neuer Benutzer

    Hallo alle miteinander,

    ich habe eine XML-Datei in der eine Liste von Elementen, die von der gleichen Klasse in Java erben - hier Name
    XML-Datei
    Code:
    <myTown>
        <name type="myname">Peter</name>
        <name type="myname">Paul</name>
        <name type="myadress">The White House</name>
        <name type="myname">Daisy</name>
    </myTown>
    in Java möchte ich das ganze wie folgt abbilden:
    Name
    Code:
    @Root(strict=false)
    public abstract class Name {    
        public abstract  String getValue();
    }
    
    MyName
    Code:
    public class MyName extends Name{
        @Text
        protected String value;
    
        public MyName(String value) {
            super();
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
    MyAddress
    Code:
    @Element
    public class MyAddress extends Name{
        @Text
        protected String value;
      
        public MyAddress(String value) {
            super();
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    MyTown - Oberelement
    Code:
    @Root
    public class MyTown {    
        @ElementList(inline=true,entry="name")
        protected List<Name> names;
    }
    Da das Framework nicht in der Lage ist, Unterklassen von Namen zu finden, habe ich mir überlegt, dass ich hierfür einen eigenen Konverter erstelle, der über das Attribut Type die entsprechenden Klassen erzeugt
    Code:
    public class MyConverter implements Converter<Name>{
    
        @Override
        public Name read(InputNode node) throws Exception {
            InputNode typeNode = node.getAttribute("type");
            String type = typeNode.getValue();
            String name = node.getValue();
            
            if(type.equals("myname")){
                return new MyName(name);
            } else if(type.equals("myaddress")){
                return new MyAddress(name);
            }
            return null;
        }}
    Insgesamt funktioniert das jedoch nicht. Wenn ich das so einlese wird der Fehler geworfen, dass von Name keine Instanz erzeugt werden kann.
    Daher meine Frage: Ist an dem Code etwas falsch? Muss das @Convert vielleicht an eine andere Stelle?

    Hinweis: Dies ist nur ein Minimal-Beispiel meines Problems. Die XML Datei empfange ich bei meinem Programm von einem Server.
    Als Konsequenz kann ich also nicht das Class-Attribut einfach hinzufügen und die Architektur kann insgesamt nicht verändert werden
     
  2. Neeldarax, 23.08.2011 #2
    Neeldarax

    Neeldarax Erfahrener Benutzer

    Hi J4y,

    ...

    regards

    EDIT: Hab ma den Unsinn gelöscht. Nach dem Testen hab ich verschiedene Ergebnisse bekommen. Jetzt weiß ich nicht wo der Fehler liegt XD

    Aber ggfs. solltest du nachgucken, wo du von der Klasse Name eine Instanzierung machst. (könnte die Ursache sein)
     
    Zuletzt bearbeitet: 23.08.2011
  3. J4y, 23.08.2011 #3
    J4y

    J4y Threadstarter Neuer Benutzer

    Hi Neeldarax,

    danke für deine Antwort!
    An der Sache liegt es aber leider nicht. Auch wenn eine Klasse abstrakt ist kann sie über Konstruktoren verfügen und Unterklassen können durchaus super aufrufen.
    Ansonsten wäre es natürlich ein einfacher blöder Fehler gewesen :-D Das wäre mir gerade fast sogar lieber^^

    Ich hab mittlerweile in Erfahrung bringen können, dass die Elemente in der richtigen XML (in diesem Beispiel nicht abgebilded) ein Attribut xsi:type haben. Das scheint wohl auch ein Standard zu sein. Mir würde es also auch helfen, wenn ich das explizit bearbeiten könnte.
     
  4. J4y, 24.08.2011 #4
    J4y

    J4y Threadstarter Neuer Benutzer

    Ich selber erstelle keine Instanz von Name. Das ist das was durch das Framework gemacht wird. Und hier liegt eben das Problem.
    In der Klasse MyTown ist eine Liste mit Elementen vom Type Name vorgegeben. Und das Framework ist hier nicht in der Lage die entsprechende Unterklasse von Name zu finden. Das geht ja auch nicht ohne weiteres in Java. Daher suche ich eine Möglichkeit hier dem Framework mitzuteilen welche Klasse es verwenden soll.
    Auf der HP der Entwickler steht, dass man in der XML Datei selber ein bestimmtes Attribut angeben kann, das die Klasse spezifizert. Die Strutkur des Dokumentes ist aber fest vorgegeben. Ich brauche also eine Möglichkeit dies zb. über Annotation zu tun.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Fehlende Elemente im RecyclerView innerhalb eines Fragments Android App Entwicklung 01.09.2017
[OFFEN] Bildgrößen für verschiedene Gerätegrößen Android App Entwicklung 04.07.2017
ArrayList Elemente beinhalten nur Daten des letzten Elements? Android App Entwicklung 25.02.2017
Layout-Probleme auf verschiedenen Geräten Android App Entwicklung 19.01.2017
Brauche Vorschläge welche GUI Elemente ich benutzen soll in meiner App Android App Entwicklung 24.12.2016
BLE Scan verhalten bei verschiedenen Devices Android App Entwicklung 19.12.2016
AI2: mit Listpicker- Auswahl mehrere Labels aus verschiedenen Index- Listen füllen. Android App Entwicklung 09.12.2016
ListView Element an eine Datenbank senden Android App Entwicklung 04.12.2016
Android Webapp -CMS bzw simple Oberfläche gesucht Android App Entwicklung 24.11.2016
Xamarin (C#) gleich gut wie Android Studio/Eclipse (Java)? Android App Entwicklung 22.09.2016
Du betrachtest das Thema "Simple Framework - Verschiedene Elemente mit gleicher Oberklasseeinlesen" im Forum "Android App Entwicklung",