Ausgabe einer geparsten XML Datei in Subactivity

  • Ausgabe einer geparsten XML Datei in Subactivity

    Hallo liebes Forum,
    ich parse eine XML-Datei von Url, gebe die Haupttags in einer Listactivity aus und bei Klick öffnet sich eine Subactivity. Bis dahin läufts.
    Mein Problem: Ich möchte in der Subactivity die unterschiedlichen "Childs" der XML Datei in versch. TextViews ausgeben.
    Ich steh voll auf n Schlauch, da man ja in die Subactivity den Variablenwert der position noch übergebn muss...
    Hier mal der Code:
    Die Listactivity:
    public class ProfsZwei extends ListActivity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);

    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();


    String xml = XMLfunctions.getXML();
    Document doc = XMLfunctions.XMLfromString(xml);

    int numResults = XMLfunctions.numResults(doc);

    if((numResults <= 0)){
    Toast.makeText(ProfsZwei.this, "Keine Daten gefunden!", Toast.LENGTH_LONG).show();
    finish();
    }

    NodeList nodes = doc.getElementsByTagName("professor");

    for (int i = 0; i < nodes.getLength(); i++) {
    HashMap<String, String> map = new HashMap<String, String>();

    Element e = (Element)nodes.item(i);
    map.put("id", XMLfunctions.getValue(e, "id"));
    map.put("name", XMLfunctions.getValue(e, "name"));
    map.put("raum", XMLfunctions.getValue(e, "raum"));
    map.put("tele", XMLfunctions.getValue(e, "tele"));
    map.put("email", XMLfunctions.getValue(e, "email"));
    mylist.add(map);
    }

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.profs,
    new String[] { "name","raum"},
    new int[] { R.id.item_title});

    setListAdapter(adapter);

    final ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    {
    if(position == id) {
    Intent o = new Intent(getApplicationContext(), Datenanzeige.class);
    o.putExtra("id", id);


    startActivity(o);
    }

    }
    }});
    }}


    Die Subactivity:
    [latex][latex]ublic class Datenanzeige extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listplaceholder);



    int i = getIntent().getExtras().getInt("id",0);
    String a = ""+i;


    ArrayList> mylist = new ArrayList>();

    String xml = XMLfunctions.getXML();
    Document doc = XMLfunctions.XMLfromString(xml);

    int numResults = XMLfunctions.numResults(doc);


    NodeList nodes = doc.getElementsByTagName("professor");

    ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.profs,
    new String[] { "name","raum"},
    new int[] { R.id.item_title});

    Die Subactivity macht bisher keine ausgabe und ist wahrscheinlich komplett falsch. Will nur meine Ansätze zeigen.
    Ist ein Projekt für die FH und bin saumäßig zeitlich hinterher. Bin für eure Hilfe mega Dankbar!!!
    Also wie muss die Class Datenanzeige aussehen, dass das so wird wie ich das will???

    Gruss, der Stefan ?(
  • Hi KimPink,

    ich wieß die Antwort ist spät aber vielleicht hilft sie dir bzw. anderen.

    1. Falls du den Inhalt der XML nur ausgaben und die XML ansicht nicht bearbeiten möchtest. Solltest du auf den DOM Parser verzichten da dieser parser die komplette XML in den Speicher lädt und dieser ist gerade bei mobilen Geräten begrenzt.
    Als Alternative wäre der SAX Parster zu nennen.

    2. Deine Klasse erbt doch schon von der Listactivity wozu brauchst du dann noch die ListView?

    Java-Quellcode

    1. final ListView lv = getListView();

    Den OnitemClickListner kannst du auch als anderes schreiben.

    Java-Quellcode

    1. public class MyList extends ListActivity {
    2. /** Called when the activity is first created. */
    3. public void onCreate(Bundle icicle) {
    4. super.onCreate(icicle);
    5. }
    6. @Override
    7. protected void onListItemClick(ListView l, View v, int position, long id) {
    8. super.onListItemClick(l, v, position, id);
    9. // Get the item that was clicked
    10. Object o = this.getListAdapter().getItem(position);
    11. String keyword = o.toString();
    12. }
    13. }
    Alles anzeigen


    3. Zu deiner eigentlichen Frage:
    Warum machst du nicht einfach eine Klasse(static) die das parsen der XML übernimmt und aus den beiden Activtiy greifst du dann nur noch auf die Daten zu?
    Weil zur zeit läuft du in jeder Activity über dem im Speicher befindlichen Dom Baum und dies kostet halt unnötig ressourcen.

    So ok da dein Post ne weile her ist will ich nicht so doll ins Detail gehen da ich nicht weiß ob du dein Problem schon selber gelöst hast. Solten aber noch fragen sein dann immer her damit ich bzw. andere aus diesem werden sie gerne beantworten.

    mfg Titus