2012-06-30 9 views
7

Estoy creando una demostración de operación matemática como suma, resta, multiplicación y división usando NDK.Android: Obteniendo un número aleatorio del método JNI

Puedo hacer la biblioteca y obtener la respuesta del código nativo pero el resultado no es el correcto, es decir, es un valor estático aleatorio.

clase 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 clase para la biblioteca de carga y el inicio de los métodos nativos.

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); 
} 

estoy usando a continuación código para mostrar resultado:

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))); 

salida

enter image description here

+2

http://marakana.com/forums/android/examples/49.html marque esta demostración. – RobinHood

+3

He agregado un argumento extra "jobject" en el método del código nativo y ahora está funcionando bien. Gracias por su enlace @RobinHood – Dharmendra

Respuesta

4

Usted está declarando los métodos no estáticos y no pasa una referencia a "jobject": es por eso que está obteniendo basura en el valor de retorno.

Para corregir el error, debe agregar un argumento adicional para "jobject" en el código nativo, justo después del argumento "env".