【问题标题】:How to set Data into JNI and retrieve into java [closed]如何将数据设置为 JNI 并检索到 java [关闭]
【发布时间】:2017-02-27 06:09:35
【问题描述】:

我在将数据设置为 JNI 并将数据导入 Java 时遇到了一些困难。我该怎么办?在这里请参考这段代码,因为我不知道我有什么问题。请帮我解决这个问题。

Student.java

public class Student {

    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


MainActivity.java

public class MainActivity extends AppCompatActivity {

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

    public static native Student getStudentAge();

    protected Student student;

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


native-lib.cpp

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

    jclass fStdClass = env->FindClass("com/example/helloJni/Student");
    jobject nStdClass = env->AllocObject(fStdClass);
    jmethodID methodId = env->GetMethodID(fStdClass, "setAge", "(I)V");
    env->CallObjectMethod(nStdClass, methodId, 10);

    return nStdClass;
}


错误:

JNI DETECTED ERROR IN APPLICATION: the return type of CallObjectMethodV does not match

【问题讨论】:

  • 请将您难以理解的问题翻译成英文。
  • @EJP 对不起我的英语不好。

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


【解决方案1】:

你需要使用CallVoidMethod,因为setAge返回void。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2021-10-01
    相关资源
    最近更新 更多