[ret] = CallJavaMethod(name$[, t, type1, value1, type2, value2, ...])
Sie müssen den Namen der aufzurufenden Methode im Argument name$
übergeben. Beachten Sie, dass Java eine von Groß- und Kleinschreibung
abhängige Sprache ist, daher muss der Methodenname, den Sie
in name$
übergeben, genau mit seiner Definition im Java-Code
übereinstimmen.
Optional können Sie im zweiten Argument eine Tabelle übergeben. Diese Tabelle unterstützt derzeit die folgenden Tags:
Static:
True
, wenn die Methode, die Sie
aufrufen möchten, statisch ist. Standardmäßig erwartet CallJavaMethod()
,
dass die Methode nicht statisch ist.
ReturnType:
name$
übergeben haben. Dies muss eine der folgenden
vordefinierten Konstanten sein:
#BYTE:
byte
, eine signierte 8-Bit-Größe.
#SHORT:
short
, eine signierte 16-Bit-Größe.
#INTEGER:
int
, eine signierte 32-Bit-Größe.
#FLOAT:
float
, eine 32-Bit-Fließkommazahl.
#DOUBLE:
double
, eine 64-Bit-Fließkommazahl.
#BOOLEAN:
boolean
, ein boolescher Wert (True
oder False
).
#STRING:
String
, eine Zeichenkette
#VOID:
Der Standardwert von diesem Tags ist #VOID
, d.h. die Methode gibt
keinen Wert zurück.
ReturnArray:
True
gesetzt ist, wird erwartet, dass die
in name$
übergebene Methode ein Array des in ReturnType
angegebenen
Datentyps zurückgibt. Wenn ReturnArray
auf True
gesetzt ist,
darf ReturnType
nicht auf #VOID
gesetzt sein. Der Standardwert
ist False
.
Nach dem optionalen Tabellenargument akzeptiert CallJavaMethod()
eine unbegrenzte Anzahl von type-
und value
-Paaren. Diese Paare
können verwendet werden, um Parameter an die in name$
angegebene
Methode zu übergeben. Für jeden type
muss direkt ein entsprechendes
value
-Argument vorhanden sein.
Die folgenden vordefinierten Konstanten werden derzeit für das
Argument type
unterstützt:
#BYTE:
byte
, eine signierte 8-Bit-Größe.
#SHORT:
short
, eine signierte 16-Bit-Größe.
#INTEGER:
int
, eine signierte 32-Bit-Größe.
#FLOAT:
float
, eine 32-Bit-Fließkommazahl.
#DOUBLE:
double
, eine 64-Bit-Fließkommazahl.
#BOOLEAN:
boolean
, ein boolescher Wert (True
oder False
).
#STRING:
String
, eine Zeichenkette
#VOID:
Der Wert, der jedem Argument type
folgt, muss dem für diesen
Parameter angegebenen Typ entsprechen, z.B. wenn Sie in einem
Argument type
#STRING
übergeben, muss nach dem Argument #STRING
eine Zeichenkette folgen.
Hier ist ein Beispiel für eine Java-Methode:
public int littleTest(String s, int v) { Log.v("Test", "Got data: " + s + " " + v); return 50; } |
Beachten Sie, dass es wichtig ist, die Methode mit dem Schlüsselwort
public
zu definieren, da auf sie außerhalb ihrer Klasse zugegriffen
wird. Um die Java-Methode littleTest()
von Ihrem Hollywood-Skript
mit CallJavaMethod()
aufzurufen, müssen Sie den folgenden Code
verwenden:
r = CallJavaMethod("littleTest", {ReturnType = #INTEGER}, #STRING, "Hello Java!", #INTEGER, 10) |
Da die Java-Methode als Ganzzahlwert deklariert wurde und die
Implementierung auf der Java-Seite 50 ergibt, wird die Hollywood-Variable
r
auf 50 gesetzt, sobald CallJavaMethod()
beendet wird.
Beachten Sie, dass diese Funktion nur in Verbindung mit dem Hollywood APK Compiler verwendet werden kann, da der Hollywood-Player Ihnen nicht erlaubt, benutzerdefinierten Code in seine Aktivität einzufügen. Dies wird nur vom Hollywood APK Compiler unterstützt.
Die Java-Methoden, die Sie definieren, sind Teil einer Unterklasse
von Hollywoods Android-Activity. Sie können also jede der Activity
-Methoden
direkt aus den von CallJavaMethod()
aufgerufenen Methoden aufrufen.
Beachten Sie jedoch, dass von CallJavaMethod()
ausgeführte Java-Methoden
nicht im Haupt-UI-Thread, sondern im VM-Thread von Hollywood
ausgeführt werden. Wenn Sie also auf Android-APIs zugreifen
müssen, die nur über den UI-Thread aufgerufen werden können
(wie die meisten View
-bezogenen APIs), müssen Sie zuerst vom
Hollywood-Thread an den Haupt-Thread delegieren. Andernfalls
funktioniert der Code nicht.
ReturnType
nicht #VOID
ist, ist
das der von der Java-Methode zurückgegebene Wert