[Monkey] MNet Problem bei fehlender Verbindung

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Midimaster

Betreff: MNet Problem bei fehlender Verbindung

BeitragMo, Sep 10, 2012 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir jemand einen Tipp geben, wie ich bei dem MNet Modul einen Absturz unter Android verhindere, wenn es keine Verbindung zum Server gibt?

Die Verwendung des Befehls soll eigentlich so sein:

BlitzMax: [AUSKLAPPEN]
Local Result$
Result=Server.Get( Adress, 3000 )


Wenn allerdings kein Server gefunden wird gibt diese Funktion nichts zurück.. oder NULL?

jedenfalls stürzen beide folgenden Abfragen ab:

BlitzMax: [AUSKLAPPEN]
Result=Server.Get( Adress, 3000 )
If Result=Null


BlitzMax: [AUSKLAPPEN]
Result=Server.Get( Adress, 3000 )
If Result=""


Wie ist das mit "leeren" Strings unter Monkey? Was mache ich hier falsch? Das Modul ist von "Xaron". Da gibt es hier im Forum auch einen, aber ich bin mir nicht sicher, ob es der gleiche ist.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

ChristianK

BeitragMo, Sep 10, 2012 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Modul gerade ausprobiert und auch die mitgelieferten Beispiele funktionieren bei mir nicht. Beim HTML5-Target wird von Get nur undefined zurückgegeben.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Midimaster

BeitragMo, Sep 10, 2012 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, und wie fragt man nun diese "Undefined" in Monkey ab, ohne dass es in Android zu einem Absturz kommt? In HTML5 kommt Monkey ja scheinbar mit der returnten "Undefined"-Meldung zurecht....

Übrigens, deine Beobachtung ist kein weiterer Fehler: Unter HTML5 ist das Modul nur eingeschränkt nutzbar, da HTML5 keine Adresse außerhalb des Ordners zulässt, aus dem das html Dokument geladen wurde.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

ChristianK

BeitragMo, Sep 10, 2012 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, okay. Daran habe ich nicht gedacht. Hab es jetzt aber mal mit Android ausprobiert und möglicherweise den Fehler gefunden. Bei mir war es jedenfalls so, dass der Fehler im Get-Aufruf ausgelöst wird und eine Meldung erscheint. Ist es das, was du meinst? Zu der Abfrage des Rückgabewertes kommt es also gar nicht erst.

Das Problem liegt in der Datei mnet.android.java im native-Ordner des Moduls. Nach Zeile 93, wo die Methode convertStreamToString definiert wird, habe ich die Zeile "if (is == null) return "";" eingefügt. Falls die angegebene Adresse nicht erreichbar ist, wird sonst trotzdem versucht, aus dem Stream zu lesen, obwohl das Objekt gleich null ist. An der Stelle wird dann stattdessen einfach ein leerer String zurückgegeben. Besser wäre es aber wahrscheinlich, wenn man hier einen Fehlercode zurückgibt und das Ergebnis über eine andere Methode abrufbar macht. Smile
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Midimaster

BeitragDi, Sep 11, 2012 2:27
Antworten mit Zitat
Benutzer-Profile anzeigen
denkst Du, dass das ein Fehler in der MNet ist, den man auch dort beheben muss? Oder kann ich auch den "leeren String" nachdem er returned worden ist, irgendwie auf der Monkey-Seite erkennen und da entsprechend reagieren?

Ich würde ungern einen Patch im Java-Target der Mnet anbringen, sondern liebern den Autor um eine Lösung bitten, die dann allen zugute kommt. Sonst muss ja ab sofort jeder patchen und bei zukünftigen Updates der Mnet wäre auch ich sofort wieder betroffen.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

ChristianK

BeitragDi, Sep 11, 2012 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das ist ein Fehler in MNet. Mit dem Patch kannst du dann natürlich in Monkey testen, ob der String leer ist, aber ansonsten stürzt das Programm eben schon im Aufruf von Get ab, sodass man da keine Chance mehr hat.

Xaron ist übrigens der gleiche in beiden Foren. Smile
Kannst ihn ja mal anschreiben und fragen, was er dazu meint.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Midimaster

BeitragDi, Sep 11, 2012 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso! Jetzt verstehe ich...

Du sagst, das Programm stürzt schon immer bei der Zeile mit dem Aufruf ab. Und ich dachte immer, dass erst die Weiterbenutzung von Result$ nachher bei mir den Fehler auslöst.

Also muss ich jetzt in die...

C:\MonkeyPro61b\modules\mnet\native\mnet.android.java

...an der entsprechenden Stelle ändern. Ich mach das mal so:
Code: [AUSKLAPPEN]
  public String convertStreamToString( InputStream is )
  {
   if (is == null) return "ERR_noStream";
    StringBuilder sb = new StringBuilder();
     ....



Das muss ich dann jetzt bei jedem Update bedenken.

Also, das probier ich jetzt gleich mal aus.... Danke

[Edit]

Also es funktioniert! Jetzt bekomme ich einen String zurück, den ich in der App auswerten kann. Danke nochmals!
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group