2012-06-30 3 views
7

Я создаю демо-версию математической операции, такой как сложение, вычитание, умножение и деление с использованием NDK.Android: Получение случайного числа из метода JNI

Я могу сделать библиотеку и получить ответ от собственного кода, но результат не является правильным, я имею в виду, что это случайное статическое значение.

Calculator.c класс

#include <stdio.h> 
#include <jni.h> 

jint 
Java_com_example_jni_calculator_Calculator_add(JNIEnv* env, jint a, jint b) { 
    return (jint)(a + b); 
} 

jint 
Java_com_example_jni_calculator_Calculator_substract(JNIEnv* env, jint a, jint b) { 
    return (jint)(a - b); 
} 

jint 
Java_com_example_jni_calculator_Calculator_multiply(JNIEnv* env, jint a, jint b) { 
    return (jint)(a * b); 
} 

jint 
Java_com_example_jni_calculator_Calculator_devide(JNIEnv* env, jint a, jint b) { 
    return (jint)(a/b); 
} 

Calculator.java класс для библиотеки нагрузки и инициируя собственные методы.

public class Calculator { 

    static { 
     System.loadLibrary("Calculator"); 
    } 

    public native int add(int a, int b); 
    public native int substract(int a, int b); 
    public native int multiply(int a, int b); 
    public native int devide(int a, int b); 
} 

Я использую ниже код для отображения результата:

int num1 = Integer.parseInt(txtNumber1.getText().toString().trim()); 
int num2 = Integer.parseInt(txtNumber2.getText().toString().trim()); 
tvResult.setText(String.format("%1$d + %2$d is equals to %3$d", num1, num2, mCalculator.add(num1, num2))); 

Выходной

enter image description here

+2

http://marakana.com/forums/android/examples/49.html проверьте это демо. – RobinHood

+3

Я добавил один дополнительный аргумент «jobject» в свой собственный код, и теперь он работает нормально. Спасибо за вашу ссылку @RobinHood – Dharmendra

ответ

4

Вы объявляете, не статические методы и не передать ссылку «jobject» - вот почему вы получаете мусор в возвращаемом значении.

Чтобы исправить ошибку, вы должны добавить дополнительный аргумент для «jobject» в собственном коде сразу после аргумента «env».

0

Вот некоторые дополнительный пример кода для ответа Сергея:

C/C++ сторона:

JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_add 
    (JNIEnv *, jobject, jint, jint); 

Java сторона:

public native int add(int v1, int v2); 

Источник: https://thenewcircle.com/s/post/49/using_ndk_to_call_c_code_from_android_apps

Еще раз спасибо Сергей К., Робинхуд и Дхармендра!

Смежные вопросы