Martin Lantzsch
Software Entwickler
23. Mai 2012

Sencha Touch 2 + Phonegap Android 4 Fix

23. Mai 2012 - Geschrieben von Martin - Ein Kommentar

<script>
// Fix for problem with android 3.x and 4.x which is
// the browser has a problem with urls with ? and this
// bug has not been fixed by google. See:
// http://code.google.com/p/android/issues/detail?id=17535 or
// http://www.sencha.com/forum/showthread.php?162322-Sencha-Touch-2-PhoneGap-are-not-working-on-Android-4/page3&highlight=Loader
//
 
Ext.Loader.setConfig({ disableCaching: false });
Ext.Ajax.setDisableCaching(false); 
</script>


Diesen Code Schnipsel in der index.html vor die app.js setzen. Anschließend funktioniert die App auch auf Android 4, da sie nun ihre JavaScript Files nachladen kann nicht mit einem weißen Screen endet.

Übrigens kann man die Fehler, die in einem WebView Produziert werden mit der App „Log Collector“ auslesen.

22. Mai 2012

Sencha Touch 2 – Tab Panel wird nicht angezeigt?

22. Mai 2012 - Geschrieben von Martin - Keine Kommentare

Stundenlanges suchen, frustrierendes herumprobieren und nun bin ich dahinter gekommen, warum mir nach dem Update auf die neuste Version von Sencha Touch 2 ein Tab in der Tab Bar fehlt. Dem Panel, das als Tab herhalten sollte, war eine „fullscreen“ Property zugeordnet die auf „true“ gesetzt war. Deshalb hat Sencha Touch diesen Tab beim Rendern aus der Tab Bar geworfen.

Eigentlich ganz logisch – Im Nachhinein. Fullscreen und Tab beißen sich nunmal.

3. Mai 2012

Wie man Parameter ordentlich verkackt

3. Mai 2012 - Geschrieben von Martin - Keine Kommentare

Eben musste ich das lesen:

$import->sArticle($article_data, array("update", false));

Es wird ein Array als Parameter verwendet, allerdings kann man dort nur einen Wert übergeben. Und zwar ist Key 1 der Name des Parameters und Key 2 der Wert. Wie bekloppt ist das bitte?
Wenn später an der Stelle noch ein, zwei weitere Parameter benötigt werden, so muss man das Design Grundlegend ändern. Und zwar zur einzig richtigen Schreibweise:

$import->sArticle($article_data, array("update" => false, 'destination' => 'testNode'));

Also Kinders daran denken – Wenn ihr Array Parameter einsetzt, dann bitte erweiterbare, denn nichts ist schlimmer als wenn man später wieder etwas dran hin Pfuschen muss um kompatibel zu bleiben!

3. Mai 2012

PHP SOAP-ERROR: Encoding: Violation of encoding rules

3. Mai 2012 - Geschrieben von Martin - Keine Kommentare

Gestern ist dieses Problem bei mir aufgetreten, und ich habe keine Lösung gefunden. Wahrscheinlich liegt es am WSDL, welches von Lotus Domino generiert wurde. Dies beinhält komplexe Strukturen an denen die Standard PHP SOAP Extension wohl scheitert.

So sah mein Code bis dahin aus:

<?php
$client = new SoapClient('http://meinsoapserver.de/?WSDL');
$response = $client->__soapCall('getArticles');

Leider warf er immer folgenden Fehler:

SOAP-ERROR: [Client] Encoding: Violation of encoding rules

Mehr oder weniger aus Verzweiflung habe ich dann mal die „NuSOAP“ Bibliothek getestet, welche SOAP ohne die PHP Extension implementiert und darüberhinaus noch Caching, usw. was mich aber in dem Moment nicht interessiert hat ;-)

<?php
$client = new nusoap_client('http://meinsoapserver.de/?WSDL', true);
$response = $client->call('getArticles');

Taterataaa, und schon gehts.

16. April 2012

WordPress RSS Feed mit SimpleXML parsen und in JSON ausgeben

16. April 2012 - Geschrieben von Martin - Keine Kommentare

Ein kleines „Abfallprodukt“ aus einem App Server, den ich eben geschrieben habe.

<?php
$url = 'http://linux-doku.de/feed';
$feed = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);
 
$final = array();
foreach($feed->channel->item as $post) {
	$final[] = array(
		'id' => (string)$post->guid,
		'title' => (string)$post->title,
		'date' => date('d.m.Y', strtotime((string)$post->pubDate)),
		'text' => (string)$post->children('http://purl.org/rss/1.0/modules/content/')->encoded,
		'link' => (string)$post->link
	);
}
echo json_encode($final);

13. April 2012

Sencha Touch 2 DetailCard automatisch hochscrollen

13. April 2012 - Geschrieben von Martin - Keine Kommentare

Ich arbeite gerade an einer Multiplattform App mit dem Sencha Touch 2 Framework, welche eine NestedList enthält, um Daten aufzulisten.

Klickt man auf ein Item der NestedList, so wird das Event „nestedListLeafItemTap“ aufgerufen, in dem ich dynamisch Inhalt in die DetailCard dieser List lade. Wenn der Inhalt nun z.B. 2 Bildschirmseiten lang ist, der Benutzer ganz nach unten scrollt, zurück geht und den nächsten Eintrag antippt, öffnet sich die DetailCard wieder ganz unten an alter Position. Nun müsste man wieder hochscrollen, was Usability Technisch gesehen Schmarren ist.

Um automatisch nach dem befüllen der Daten nach oben zu scrollen, holen wir uns in der „nestedListLeafItemTap“ Methode die DetailCard und greifen auf das „Scrollable“ zu. Das interne Handling für Scrollbare Elemente und scrollen darüber ganz nach oben. Natürlich so damit es dem User nicht ins Auge fällt:

var detailCardScroller = nestedlist.getDetailCard().getScrollable().getScroller();
detailCardScroller.refresh();
detailCardScroller.scrollToTop(false);

9. März 2012

Sencha Designer einer Component eine Objekt Property hinzufügen

9. März 2012 - Geschrieben von Martin - Keine Kommentare


Wenn man eine Eigenschaft hinzufügt und keinen Wert mitgibt, wird diese automatisch ein String. Will man nun aber ein Objekt haben, weil man z.B. zu einer NestedList Komponente eine „detailCard“ hinzufügen möchte, so benötigt man allerdings ein Objekt.

Dieses kann man mit folgender Notation hinzufügen:

detailCard: {}

dann auf „Add“ klicken und schon ist es hinzugefügt, auch wenn man es nicht direkt sieht, da die Eingabeform ja zugeleich ein Filter ist. Nun einfach „detailCard“ eintippen und da ist es.