android - 如何使用 JNI 将数据传递到构造函数

标签 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;
}

最佳答案

试试这个

学生.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;
}

关于android - 如何使用 JNI 将数据传递到构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42491260/

相关文章:

java - 如何在 Android 上获取有关显示设备的 PCI 信息

java - 如何使用android ble接口(interface)作为结构发送uint8和uint32数据

c++ - 编译器如何区分 C++ 中的私有(private)数据和公共(public)数据?

java - 从特定 USB 端口捕获键盘输入

java - JNI 返回的 jobobject 未设置字段

java - jni/java : thread safe publishing/sharing of effectively immutable native object

Android Room LiveData Observer 未更新

android - 为什么HtmlCompat.fromHtml()没有设置文本样式?

c++ - 如何将 Node.js 解释器嵌入到 C/C++ 中?

c++ - 这段代码应该做什么? (引用右值)