2012-06-30 21 views
7

sto creando una demo di operazione matematica come addizione, sottrazione, moltiplicazione e divisione con NDK.Android: Ottenere numero casuale da metodo JNI

io sono in grado di rendere la biblioteca e ottenere la risposta dal codice nativo, ma risultato non è corretto voglio dire che è valore statico casuale.

classe 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 classe per la libreria di carico e di avviare metodi nativi.

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

sto usando qui di seguito il codice per visualizzare risultato:

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

uscita

enter image description here

+2

http://marakana.com/forums/android/examples/49.html controllare questo demo. – RobinHood

+3

ho aggiunto uno in più argomento "jobject" nel metodo del codice nativo e ora si sta lavorando bene. Grazie per il tuo link @RobinHood – Dharmendra

risposta

4

si dichiara metodi non statici e non si passa un riferimento a "jobject" - è per questo che stai ottenendo spazzatura nel valore di ritorno.

Per risolvere il bug è necessario aggiungere un argomento in più per "jobject" nel codice nativo, subito dopo l'argomento "env".