Problem und weiss nicht welches...

  • Antworten:1
  • Bentwortet
Sascha N.
  • Forum-Beiträge: 60

19.12.2011, 02:13:52 via Website

hallo zusammen.
Ich bin Neu in der Android Entwicklung. Komme auch ganz gut vorran.
Ich habe eine situation die ich nicht verstehe ich muss einen Aufruf aus dem Internet 2 mal wiederholen bevor die ListView aktualisiert wird. Geschweige denn die XML datei aus dem Internet heruntergeladen wird. Nun ist es ja nicht im sinne des Erfinders unnötig die Internet-Leitung zu belasten.

hier mal der Code meiner ListViewActivity
1package de.mercedesfreunde.main;
2
3import de.mercedesfreunde.main.R;
4import android.app.Activity;
5import android.os.Bundle;
6import android.view.Menu;
7import android.view.MenuInflater;
8import android.view.MenuItem;
9import android.view.View;
10import android.view.Window;
11import android.widget.ListAdapter;
12import android.widget.ListView;
13import android.widget.TextView;
14
15
16public class EventListActivity extends Activity {
17 static int YearSelect = 2011;
18 static int MonthSelect = 11;
19 static String[] monthsArray = null;
20 @Override
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 requestWindowFeature(Window.FEATURE_NO_TITLE);
24 monthsArray = getResources().getStringArray(R.array.months);
25 setContentView(R.layout.eventlist);
26 refreshEvents();
27 refreshEvents();
28 }
29
30 public void refreshEvents() {
31 TextView tTitel = (TextView) this.findViewById(R.id.tMonat);
32 tTitel.setText(monthsArray[MonthSelect]+" "+Integer.toString(YearSelect) );
33 Events eventList = new Events();
34 ListAdapter listenAdapter = new EventItemAdapter(this, eventList.getEvents());
35 ListView meineListView = (ListView) findViewById(R.id.list);
36 meineListView.setAdapter(listenAdapter);
37 }
38
39 @Override
40 public boolean onCreateOptionsMenu(Menu menu) {
41 MenuInflater inflater = getMenuInflater();
42 inflater.inflate(R.menu.events_menu, menu);
43 return true;
44 }
45
46 public void onClick(View v) {
47 switch (v.getId()) {
48 case R.id.tNext :
49 if (MonthSelect == 12) {
50 MonthSelect= 1;
51 YearSelect++;
52
53 } else MonthSelect++;
54 refreshEvents();
55 refreshEvents();
56 break;
57 case R.id.tPrev :
58 if (MonthSelect == 1) {
59 MonthSelect= 12;
60 YearSelect--;
61 } else MonthSelect--;
62 refreshEvents();
63 refreshEvents();
64 break;
65 }
66 }
67 public boolean onOptionsItemSelected (MenuItem item){
68 switch (item.getItemId()){
69
70 case R.id.refresh_list :
71 refreshEvents();
72 refreshEvents();
73 return true;
74
75 }
76
77 return false;
78 }
79}

wie man sieht habe ich auch einen Adaper der die daten aus dem Internet herunterholt. Das habe ich mit SAX aus einem Howto übernommen. Ich muss dazusagen das ich bisher immer nur PHP und Pascal programmiert habe und der umstieg auf Java mir etwas schwer fällt. daher noch meine classe die die daten aus dem internet holt :

1public class Events {
2 ArrayList<Event> eventList = new ArrayList<Event>();
3
4 public Events() {
5 try {
6
7 /** Handling XML */
8 SAXParserFactory spf = SAXParserFactory.newInstance();
9 SAXParser sp = spf.newSAXParser();
10 XMLReader xr = sp.getXMLReader();
11
12 /** Send URL to parse XML Tags */
13 URL sourceUrl = new URL(
14 "http://www.the-microborgs.de/kalender/export_index.php?where=1&"+XMLHandler.SQLQuery);
15
16 /** Create handler to handle XML Tags ( extends XMLHandler ) */
17 XMLHandler myXMLHandler = new XMLHandler();
18 xr.setContentHandler(myXMLHandler);
19 xr.parse(new InputSource(sourceUrl.openStream()));
20
21 } catch (Exception e) {
22 System.out.println("XML Pasing Excpetion = " + e);
23 }
24
25 }
26
27 public ArrayList<Event> getEvents() {
28 XMLHandler.SQLQuery = "month="+Integer.toString(EventListActivity.MonthSelect)+"&year="+Integer.toString(EventListActivity.YearSelect);
29 eventList = XMLHandler.eventList;
30 return eventList;
31 }
32}

Was da Passiert ist mir ja so weit Klar. Aber warum das mit dem "refreshEvents" 2 mal aufrufen muss ist mir ein Rätsel.

Ich hoffe einer von euch kann mir das evtl erklären.

Gruss Sascha

Antworten
Sascha N.
  • Forum-Beiträge: 60

19.12.2011, 04:20:19 via Website

Ich muss mir selbst in den Hintern Treten.

Wie dumm man eigentlich sein kann.
Der Fehler war das die XML datei falsch aufgerufen wurde. die SQLQuery wurde von mir nicht initialisiert. Ergebnis ?
Der Parser bekam eine Nicht XML Konforme datei zu gesicht. Also eine Exception vom Parser. Nach dem 2. Aufruf war logischerweise die SQLQuery vairable definiert. Aber noch mit den Alten Daten. Also bekam ich nen Falschen monat angezeigt.

ich habe jetzt einfach bei der events.java folgenden code ferig gestellt :
1public class Events {
2 ArrayList<Event> eventList = new ArrayList<Event>();
3 public String SQLQuery;
4
5 public Events() {
6 setSQLQuery("month="+Integer.toString(EventListActivity.MonthSelect)+"&year="+Integer.toString(EventListActivity.YearSelect));
7 try {
8
9 /** Handling XML */
10 SAXParserFactory spf = SAXParserFactory.newInstance();
11 System.out.println("Starting SAXParser...");
12 SAXParser sp = spf.newSAXParser();
13 XMLReader xr = sp.getXMLReader();
14
15 /** Send URL to parse XML Tags */
16 URL sourceUrl = new URL(
17 "http://www.the-microborgs.de/kalender/export_index.php?where=1&"+this.getSQLQuery());
18 System.out.println("erstellt XMLHandler");
19 /** Create handler to handle XML Tags ( extends XMLHandler ) */
20 XMLHandler myXMLHandler = new XMLHandler();
21 xr.setContentHandler(myXMLHandler);
22 System.out.println("Parsee XMLDatei");
23 xr.parse(new InputSource(sourceUrl.openStream()));
24
25 } catch (Exception e) {
26 System.out.println("XML Pasing Excpetion = " + e);
27 }
28
29 }
30
31 public String getSQLQuery() {
32 return this.SQLQuery;
33 }
34
35 public void setSQLQuery(String Query) {
36 SQLQuery = Query;
37 }
38
39 public ArrayList<Event> getEvents() {
40 eventList = XMLHandler.getEventList();
41 return eventList;
42 }
43}

und oh wunder es geht.
Auf jeden fall kommt mal wieder der Spruch zum tragen wer die LogCat beobachtet ist klar im vorteil und mit etwas schauen findet man auch seinen eigenen Fehler. auch wenn er noch so "Blöd" ist. Also sorry das ich überhaupt gefragt habe.

Selbsterkenntnis ist der erste weg zur besserung :)

Antworten