Mat*_*att 3 java-native-interface android kotlin
为什么我无法访问数据类上的公共成员?
在我的测试 Android Kotlin/NDK 应用程序中,GetFloatField正在报告
“foo_model”引用的 JVM 对象属于“Class”类型,它无权访问“Foo”中声明的字段“float a”。
Class<Foo>是我用所有公共成员定义的数据类。
我是 Kotlin 新手,所以这个应用程序只是我学习如何在本机层之间传递自定义结构的一个练习。
MainActivity.kt
package com.example.structtest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
public data class Foo(var a: Float = 3.14f, var b: Int = 10)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var f = Foo(3.14f, 10)
var dFoo = doubleFoo(f)
sample_text.text = "foo.a = ${dFoo.a}, foo.b=${dFoo.b}"
}
external fun doubleFoo(_foo : Foo): Foo
companion object {
// Used to load the 'native-lib' library on application startup.
init {
System.loadLibrary("native-lib")
}
}
}
Run Code Online (Sandbox Code Playgroud)
native-lib.cpp:
package com.example.structtest
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
public data class Foo(var a: Float = 3.14f, var b: Int = 10)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var f = Foo(3.14f, 10)
var dFoo = doubleFoo(f)
sample_text.text = "foo.a = ${dFoo.a}, foo.b=${dFoo.b}"
}
external fun doubleFoo(_foo : Foo): Foo
companion object {
// Used to load the 'native-lib' library on application startup.
init {
System.loadLibrary("native-lib")
}
}
}
Run Code Online (Sandbox Code Playgroud)
您试图a从描述的Class对象(在您的代码中)而不是直接从实例(在您的代码中)读取字段。 Foofoo_modelFoo_foo
改成env->GetFloatField(foo_model, foo_float_field);
env->GetFloatField(_foo, foo_float_field);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |