2017-02-27 106 views
1

我想在JNI的帮助下将整数值传递给学生类构造函数,但可能得不到预期的输出结果。请问任何人都可以引用此代码并引导我。

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

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

回答

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; 
} 
+0

感谢您的回答 –

相关问题