2012-06-30 34 views
7

Tôi đang tạo bản demo hoạt động toán học như cộng, trừ, nhân và chia bằng NDK.Android: Lấy số ngẫu nhiên từ phương thức JNI

Tôi có thể tạo thư viện và nhận phản hồi từ mã gốc nhưng kết quả không đúng, ý tôi là giá trị tĩnh ngẫu nhiên.

lớp 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 lớp cho thư viện tải và khởi xướng phương pháp tự nhiên.

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

Tôi đang sử dụng mã dưới đây để hiển thị kết quả:

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

Output

enter image description here

+2

http://marakana.com/forums/android/examples/49.html kiểm tra bản trình diễn này. – RobinHood

+3

Tôi đã thêm một đối số thừa "jobject" vào phương thức của mã gốc và bây giờ nó hoạt động tốt. Cảm ơn bạn đã liên kết @RobinHood – Dharmendra

Trả lời

4

Bạn đang tuyên bố phương pháp không tĩnh và không vượt qua một tham chiếu đến "jobject" - đó là lý do tại sao bạn nhận được rác trong giá trị trả lại.

Để khắc phục lỗi, bạn phải thêm đối số bổ sung cho "jobject" vào mã gốc, ngay sau đối số "env".