Unterschiedliche ergebnisse bei WLAN und 3G/4G

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

24.11.2013, 13:34:05 via Website

Hallo zusammen,

Ich habe nun schon einige Treads gefunden die sich mit einem ähnlichen Problem beschäftigen wie ich es habe, allerdings hatte bisher kein Tread die Lösung für mich.

Wie in meinen Anderen Treads schon gesehen arbeite ich mit XML,

Allerdings wie es aussieht habe ich jetzt einen Punkt erreicht wo ich wirklich diesen gedanken nochmal überdenken sollte :angry:

in meinem PHP Code steht folgendes (nur ein ausschnitt der wichtigen elemente) :
1$value1 = html_entity_decode($value, ENT_COMPAT|ENT_XML1, "UTF-8");
2 $value1 = str_replace(array("\r","\n"),array("","<br />"),$value1);
3 $xml_output .= " <".$key."><![CDATA[".$value1."]]></".$key.">\n";
4 echo $xml_output;

das ergibt dann folgenden XML-Code von (Ich nehme jetzt bewusst den Text der mir ärger macht)

1<event>
2 <subject><![CDATA[TuningExpo Saarbrücken]]></subject>
3 <message><![CDATA[Was ist die TuningExpo?<br /><br />Für Kenner der Szene ist sie ein Muss: die TuningExpo im MesseZentrum Saarbrücken. Seit Ihrer Gründung im Jahr 2005 hat die TuningExpo ein imposantes Wachstum gezeigt und zählt heute zu den Top Tuningmessen in Europa. Im Jahr 2014 startet das beliebte Szene-Event bereits zu seiner 10. Jubiläumsausgabe. Jährlich pilgern Tausende Besucher ins MesseZentrum Saarbrücken, um dort die Elite der internationalen Tuningszene zu treffen und deren neueste Kreationen zu bestaunen. Für Tuning-Fans steht fest: Die TuningExpo ist Kult!<br /><br />Was bietet die TuningExpo?<br /><br />Die TuningExpo ist gleichzeitig Messe & Event für die Tuning- und Clubszene. Sie bietet die perfekte Symbiose von gewerblichen Ausstellern, hochkarätigen Showcars sowie rund 100 internationalen Clubs! Sowohl Ausstellern als auch Besuchern wird darüber hinaus ein spektakuläres Unterhaltungsprogramm mit jeder Menge Show, Event und Party geboten.<br />In 13 Messehallen und einem riesigen Freigelände werden – neben rund 1000 Ausstellungsfahrzeugen – die aktuellen Trends und Neuheiten der Tuning-Saison 2014 gezeigt. Egal ob Car-Hifi, Fahrwerke, Felgen, Reifen, Spoiler oder sonstiges Zubehör – die TuningExpo läßt das Herz eines jeden Tuning-Fans höher schlagen!<br /><br />Warum sollte ich an der TuningExpo teilnehmen?<br /><br />Die TuningExpo ist DAS Szene-Mekka! Ein im Jahr 2013 komplett ausgebuchtes Messegelände zeugt von der Qualität dieses Messehighlights! Die Kombination von qualitativ hochwertigen Showfahrzeugen, Ausstellern und Clubs vermittelt den Besuchern auf magische Art den wahren Tuning-Lifestyle! Das umfangreiche Showprogramm sorgt für Unterhaltung sowie eine hohe Verweildauer im MesseZentrum . So verwundert es auch nicht, daß die deutsche und internationale Medienlandschaft - seit rund einem Jahrzehnt - fast ausschließlich in Positiv- Schlagzeilen über die TuningExpo berichtet.<br />Auf der TuningExpo treffen Sie Ihre Zielgruppe in entspannter - fast schon freundschaftlicher - Atmosphäre. Lesen Sie dazu einfach unser Fach-/Medienecho auf der Rückseite dieses Folders. Profitieren auch Sie von der TuningExpo als idealer Schnittstelle zwischen Tuning-Szene und Industrie!<br /><br /><br />Wo findet die TuningExpo statt?<br /><br />Die TuningExpo findet im MesseZentrum Saarbrücken statt. Das stadtnah gelegene Messegelände verfügt neben einem gut ausgebauten Freigelände über 13 Messehallen mit rund 26.000 qm Ausstellungsfläche und ist nur 5 Autominuten von der französischen Grenze entfernt.<br />Zum direkten Einzugsgebiet der TuningExpo zählen der gesamte süd-westdeutsche Raum , Ostfrankreich, Luxemburg, Belgien und Holland.<br /><br />Wann findet die TuningExpo statt?<br /><br />Vom 27. – 29. Juni 2014 verwandelt sich das MesseZentrum Saarbrücken nun bereits zum zehnten Mal zum internationalen Tuning-Hotspot : Hier trifft sich die Szene!<br />Tragen auch Sie sich das Datum der Jubiläumsveranstaltung in Ihrem Terminkalender ein und lassen Sie es sich nicht entgehen, wenn es vom 27. – 29. Juni wieder heißt: TuningExpo – The Place to be...<br /><br />Kontakt:<br /><br />Saarmesse GmbH<br />Gersweilerstr. 78<br />66117 Saarbrücken<br />Tel: 0681-954020<br />Fax: 0681-95402-30<br />E-Mail: tuningexpo@saarmesse.de]]></message>
4 <ttype id="1000">Sonstiger Termin</ttype>
5 <event_end>2014-06-29</event_end>
6 <veranstalter><![CDATA[TuningExpo (Saarmesse)]]></veranstalter>
7 <imganz>0</imganz>
8 <galerie>http://mercedes-freunde.info/galerie/get_images.php?id=20140627-20140629-1000</galerie>
9 <noentrys>false</noentrys>
10 </event>

in der App benutze ich das dann folgendermassen :
1String convertedString = currentValue.replace("<br />", "\n");
2 TextView tvMessage = (TextView) findViewById(R.id.detTMessage);
3 tvMessage.setText(convertedString);

in meiner App wird unter WLAN bedingungen alles Korrekt angezeigt, unter 3G/4G oder allen anderen Mobilen transfairmethoden bekomme ich abgehackten Text in der app zu gesicht.

ich habe auch Google befragt (wie man so schön sagt)

Ergebnisse bekam ich zu meist in verbindung mit gzip komprimiertem code wie z.b.

http://stackoverflow.com/questions/3848040/handling-gzipped-content-on-android

aber, auch dieser Hinweis wie diverse andere auch hat mir nicht weiterhelfen können.

Egal was ich versuche, ich erhalte IMMER im 3g modus einen (ich sage mal gekürzen text) als Message angezeigt.

ich weiss keinen rat mehr was hier falsch läuft :( wie gesagt und WLAN funktioniert alles einwandfrei !

Weiss jemand von euch Rat ?

gruss Sascha

— geändert am 24.11.2013, 13:34:45

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

24.11.2013, 20:40:22 via App

Wird denn die Komplette Xml übertragen?
Vlt mal im 3g netz einen Debugger benutzen.

LG Pascal //It's not a bug, it's a feature. :) ;)

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

25.11.2013, 04:05:10 via App

es wird darauf hinaus laufen das ich von XML weg muss. und auf json umsteige.

wird nur schwer den auf event basierten sax auf json zu schreiben.

hier mal der link zur APP um die es geht.

https://play.google.com/store/apps/details?id=de.themicroborgs.tuningtreffen

da könnt ihr euch das Ergebnis direkt ansehen im Vergleich WLAN und mobilde Daten. am besten sieht man das bei der tuningexpo für mich sah das auch erst aus als wäre die Datei nicht komplett. aber dann wäre auch die list view unvollständig und würde mir einen Fehler im Debugger auswerfen.

tut er aber nicht.

Ideen ? als her damit :)

Antworten
impjor
  • Forum-Beiträge: 1.793

25.11.2013, 14:50:20 via App

Nun, dass hat ja gar nichts mit xml bzw. json an sich zu tun.
Bitte erkläre doch genauer, worin sich beide Texte unterscheiden.
Normalerweise besteht deine Aufgabe, ja aus zwei Teilen: Herunterladen der Datei vom Server und xml parsen und darstellen.

Deshalb musst du die einzelnen Schritte debuggen. Wird die Datei im 3gmodus schon falsch heruntergeladen?

Zu dem ist der relavante Android-Code nicht zu sehen. (Download der Datei).


LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

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

26.11.2013, 05:11:28 via Website

Das ist die Methode welche aufgerufen wird.
getSQLQuery gibt folgenden wert zurück : "where=1&month=6&year=2014"

1public static void parse() {
2 try {
3 if (networkState) {
4 SAXParserFactory spf = SAXParserFactory.newInstance();
5 SAXParser sp = spf.newSAXParser();
6 XMLReader xr = sp.getXMLReader();
7 URL sourceUrl = new URL(
8 "http://www.tuningtreffen.info/api/calendar.php?"+getSQLQuery());
9 XMLHandler myXMLHandler= new XMLHandler();
10 xr.setContentHandler(myXMLHandler);
11 URLConnection connection = sourceUrl.openConnection();
12 ### Hier habe ich auch schon versucht einen anderen wert zu setzen wie z.b.
13 ### connection.setRequestProperty("Accept-Encoding", "gzip,identity ");
14 ### connection.setRequestProperty("Accept-Encoding", "identity ");
15 ### Ohne irgend eine verändernung.
16 connection.setRequestProperty("Accept-Encoding", "gzip");
17 InputStream stream = connection.getInputStream();
18 if ("gzip".equals(connection.getContentEncoding())) {
19 stream = new GZIPInputStream(stream);
20 System.out.println("gzip Daten gefunden");
21 } else System.out.println("Keine gzip Daten gefunden");
22
23 InputSource sourceData = new InputSource(stream);
24 sourceData.setEncoding("UTF-8");
25 xr.parse(sourceData);
26 System.out.println("XML Pasing complete ");
27 } else {
28 System.out.println("XML Pasing abgebrochen. Es besteht keine Internet verbindung ");
29 }
30 } catch (Exception e) {
31 System.out.println("XML Pasing Excpetion = " + e);
32 }
33 }

Ich hoffe das ich da einen Fehler drinnen habe oder das Problem einfach gelöst werden kann.

bin mal gespannt, und hoffe das es was einfaches ist :)

danke schon mal für die Hilfe

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

26.11.2013, 06:25:45 via Website

Kommando zurück..... Habe den Fehler gefunden !!!

Der XMLParser war schuld.... ^^

folgender code stammt aus einem Tutorial was ich 1:1 übernommen hatte :


1@Override
2 public void startElement(String uri, String localName, String qName,
3 Attributes attributes) throws SAXException {
4
5 currentElement = true;
6 ......Weitere Code.....
7 }
8
9 @Override
10 public void endElement(String uri, String localName, String qName)
11 throws SAXException {
12
13 currentElement = false;
14 ......Weitere Code.....
15 }
16
17 @Override
18 public void characters(char ch[], int start, int length)
19 throws SAXException {
20 if (currentElement) {
21 currentValue = new String(ch, start, length);
22 currentElement = false;
23 }
24
25 }


und hier das Neue was funktioniert :
1@Override
2 public void startElement(String uri, String localName, String qName,
3 Attributes attributes) throws SAXException {
4
5 currentElement = true;
6 currentValue = new StringBuilder();
7 ......Weitere Code.....
8 }
9
10 @Override
11 public void endElement(String uri, String localName, String qName)
12 throws SAXException {
13
14 currentElement = false;
15 ......Weitere Code.....
16 }
17
18 @Override
19 public void characters(char ch[], int start, int length)
20 throws SAXException {
21
22 if (currentElement) {
23 currentValue.append(ch, start, length);
24 }
25
26 }

ich würde mal sagen einfache ursache grosse wirkung. Im alten code wurde einfach ein String erstellt aber nur eine gewisse länge. und der rest ? Futsch.

Jetzt wird solange der String gefüllt bis das ende des Elements erreicht ist.

Offenbar war das Tutorial nicht für lange zeichenketten ausgelegt ^^

Gruss Sascha

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

26.11.2013, 15:09:25 via App

was ich aber nicht verstehe, und ich hoffe das kann mir jemand erklären weshalb der unterschied bei WLAN nicht aufgefallen war und bei mobiler Verbindung so gravierend ausgefallen ist.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.11.2013, 20:38:17 via App

Vlt. wegen länger Ladezeiten oder ungenau hingeschaut, da ja beides mal die gleichen texte angezeigt wurden

LG Pascal //It's not a bug, it's a feature. :) ;)

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

26.11.2013, 23:36:33 via App

wie auch immer. ich möchte dir danken. du hattest mich auf die richtige Spur gebracht. :) habe Schritt für schritt mittels log nach voll zogen was abgelaufen ist. was ausgegeben wurde und habe dann bemerkt das der string im parser frühzeitig beendet wurde.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.11.2013, 07:03:46 via App

Kein Problem dafür hat man doch so ein Forum :)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten