1. Unicate, 28.03.2012 #1
    Unicate

    Unicate Threadstarter Android-Experte

    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:
    PHP:
    class foo {
        
    byte[] _array;
    }
    Im C sieht das ganze im Moment so aus:

    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(_jclsjmid);
    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(byteArrayoffsetsize, (jbyte*)value);
    // write the array onto the java object
    _env->SetByteField(_jobjgetFieldId("_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?
     
  2. Unicate, 29.03.2012 #2
    Unicate

    Unicate Threadstarter Android-Experte

    Problem gelößt!

    Die einzige Idee, dir mir noch kam, war das ich mir das bytearray als Feld zurückgeben lasse (pointer auf das javabytearray) und dieses Feld dann direkt im C beschreibe.

    Nachteil hier, wenn die Membervariable mit null initialisiert wurde, muss zuerst ein Callback (C=>Java) aufgerufen werden, in dem der Member allokiert wird. Wird das nicht gemacht liefert die Methode "GetByteArrayRegion" null zurück.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Hardware Sensoren an Listener übergeben Android App Entwicklung Montag um 23:01 Uhr
Nachrichten vom FirebaseMessagingService an die MainActivity übergeben? Android App Entwicklung 09.01.2019
TextView wert übergeben Android App Entwicklung 28.06.2018
Du betrachtest das Thema "JNI: Object mit einem byte array ans C übergeben" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.