2014-01-16 2 views
3

Я успешно запустить свой JNI sample.Now я пытаюсь добавить два значения, но его сумма не является proper.I делится мой code.Please сказать мне, что не так я делаюСумма двух значений с использованием NDK андроидом

jint Java_com_example_hellojni_HelloJni_sumTwoValues(JNIEnv* env,jint a, jint b){ 
//_android_log_print("HelloJni", "values a", "%p", &a); 

    __android_log_print("HelloJni", "LOG_TAG", "Need to print : %d %d",a, b); 
    return (a+b); 
} 

И как я называю этот метод из своей деятельности следующим образом.

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    /* Create a TextView and set its content. 
    * the text is retrieved by calling a native 
    * function. 
    */ 
    TextView tv = new TextView(this); 
    tv.setText("Sum is ."+ sumTwoValues(15,7)); 
    setContentView(tv); 
} 



/* A native method that is implemented by the 
* 'hellojni' native library, which is packaged 
* with this application. 
*/ 

public native int sumTwoValues(int a,int b); 


// Loading 'hellojni' 

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

И текст Textview не является фиксированным. Каждый раз, когда я запускаю, каждый раз меняет текст. ex of sum i have is 363855916

ответ

5

Попробуйте как

jint Java_com_example_hellojni_HelloJni_sumTwoValues(JNIEnv* env, jobject obj,jint a, jint b){ 
//_android_log_print("HelloJni", "values a", "%p", &a); 

    __android_log_print("HelloJni", "LOG_TAG", "Need to print : %d %d",a, b); 
    return (a+b); 
} 

B'coz вы определяете

public native int sumTwoValues(int a,int b); как не статический

и если

public native static int sumTwoValues(int a,int b); static method 

Затем используйте jclass вместо jobject

+0

может у вас, пожалуйста, скажите, какой тип значения использует собственный метод, если мы не добавляем jobject в качестве аргумента. – Manmohan

+0

@Manmohan, если вы объявляете свой собственный метод как нестатический, или если используете статический jclass. Его кодирование, которое вам нужно соблюдать. –

0

Введите код своей функции следующим образом. Он должен давать правильное возвращаемое значение.

JNIEXPORT jint JNICALL Java_com_example_hellojni_HelloJni_sumTwoValues(JNIEnv * env, jobject obj, jint a, jint b) 
{ 
     //_android_log_print("HelloJni", "values a", "%p", &a); 
     jint total=(a+b); 
     __android_log_print("HelloJni", "LOG_TAG", "Need to print : %d %d",a, b); 
     return total; 

} 
+0

Я попытался напечатать, значение б с помощью android_log_print.Their а, б не имеет значения я прошел используя метод в консоли. это похоже на это 01-16 02: 26: 48.267: I/System.out (1123): необходимо распечатать: 505413661 154251451 – Manmohan

+0

@Manmohan Я отредактировал свой ответ, проверьте это. –

2

Вот фрагмент кода JNI

JNIEXPORT jint JNICALL Java_org_example_ndk_NativeLib_add 
    (JNIEnv * env, jobject obj, jint value1, jint value2) { 
     return (value1 + value2); 
} 

Создать один класс для доступа к этому методу NativeLib.java

public class NativeLib { 

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

    /** 
    * Adds two integers, returning their sum 
    */ 
    public native int add(int v1, int v2); 
} 

И MainActivity.java OnCreate

nativeLib = new NativeLib(); 
res = nativeLib.add(v1, v2); 
result.setText(new Integer(res).toString()); 

Вы можете найти полную демо из ссылки ниже

http://junedk.blogspot.in/2014/01/ndk-sum-of-two-values.html

Thanks
Juned Хан

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