如何使用JNI将数据传递给构造函数

时间:2017-02-27 16:50:22

标签: android c++ java-native-interface

我想在JNI的帮助下将整数值传递给学生类构造函数,但可能无法获得预期输出我的错误请任何人都可以参考此代码并指导我。

Student.java

public class Student {

    private int age;

    public Student(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

StudentActivity.java

public class StudentActivity extends AppCompatActivity {

    static {
        System.loadLibrary("native-lib");
    }

    protected Student student;

    public static native Student getStudentInfo();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student);
        student = getStudentInfo();
        Log.d("TAG_DATA",String.valueOf(student.getAge()));
    }
}

student.cpp

JNIEXPORT jobject JNICALL
Java_com_kishandonga_jni_1expriment_Design_StudentActivity_getStudentInfo(JNIEnv *env,
                                                                          jclass type) {

    jclass fStudentClass = env->FindClass("com/kishandonga/jni_expriment/Model/Student");
    jmethodID constructor = env->GetMethodID(fStudentClass, "<init>", "(I)V");
    jobject nStdClass = env->NewObject(fStudentClass, constructor, 13);
    env->CallVoidMethod(nStdClass, constructor);

    return nStdClass;
}

1 个答案:

答案 0 :(得分:2)

试试这个

<强> student.cpp

JNIEXPORT jobject JNICALL
Java_com_kishandonga_jni_1expriment_Design_StudentActivity_getStudentInfo(JNIEnv *env,
                                                                          jclass type) {

    jclass fStudentClass = env->FindClass("com/kishandonga/jni_expriment/Model/Student");
    jmethodID constructor = env->GetMethodID(fStudentClass, "<init>", "(I)V");
    jobject nStdClass = env->NewObject(fStudentClass, constructor, 13);
    // remove this
    // env->CallVoidMethod(nStdClass, constructor);
    return nStdClass;
}