U
Unicate
Erfahrenes Mitglied
- 57
Hallo alle zusammen!
Ich muss ein bytearray(C) (uint8_t[]) in ein Java object übergeben, welches ein bytearray (byte[]) als Member hat.
Im java etwa:
Im C sieht das ganze im Moment so aus:
Problem ist hier, das das setzen der Variable "_array" nicht so funktioniert, da die Methode "SetByteField" ein jbyte und kein ganzes Array erwartet.
Welche Methode muss ich nutzen um das ganze array setzen zu können?
Ich muss ein bytearray(C) (uint8_t[]) in ein Java object übergeben, welches ein bytearray (byte[]) als Member hat.
Im java etwa:
PHP:
class foo {
byte[] _array;
}
PHP:
// Klassendefinition suchen
_jcls = env->FindClass("de/unicate/jnitest/foo");
if (_jcls == NULL) {
LOGE("Could not find class: %s\n", classPath);
return;
}
// Adresse des Konstruktors der Klasse ermitteln
jmethodID jmid = env->GetMethodID(_jcls, "<init>", "()V");
if (jmid == NULL) {
LOGE("Error GetMethodID\n");
return;
}
// Neues Objekt der Klasse erzeugen
_jobj = env->NewObject(_jcls, jmid);
if (_jobj == NULL) {
LOGE("Error NewObject\n");
return;
}
int size = 8;
int offset = 0;
uint8_t value[] = {0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02};
// create a java byte array
jbyteArray byteArray = _env->NewByteArray(size);
// fill the byte array with the value
_env->SetByteArrayRegion(byteArray, offset, size, (jbyte*)value);
// write the array onto the java object
_env->SetByteField(_jobj, getFieldId("_array", "[B"), byteArray); // <= Geht nicht so
Problem ist hier, das das setzen der Variable "_array" nicht so funktioniert, da die Methode "SetByteField" ein jbyte und kein ganzes Array erwartet.
Welche Methode muss ich nutzen um das ganze array setzen zu können?