如标题所示,如果函数来自不同的Java活动类,如何从 val txCommand = Command(TypeBContract.Commands.Create(), listOf(me.owningKey))
val txBuilder = TransactionBuilder(notary)
.addInputState(typeARef)
.addOutputState(outputState, TYPEB_CREATION_CONTRACT_ID)
.addCommand(txCommand)
调用Java函数?
所有示例和教程都来回调用C++
函数和Java,但是调用者是类,并且JNIEnv和jobject从Java到JNI传递。但是,如果需要调用的函数来自不同的Java活动类怎么办?这该怎么做?通过活动的“ this”无效
这是类的示例布局
活动课
C++
JNIAdapter.class
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
JNIAdapter.launch();
}
private void DisplayLoginDialog()
{
//...
}
}
jnisample.cpp
public class JNIAdapter {
static {
System.loadLibrary("jnisample-lib");
}
public static native void launch();
}
在上面的代码中,使用jobject引用了JNIAdapter类,而不是Activity,因此未调用DisplayLoginDialog()。 这该怎么做?
答案 0 :(得分:1)
您的小例子(我知道您减少了与特定问题无关的所有细节,这非常好!)可以在没有 native 方法的情况下运行。 JNIAdaptor.launch()可以是纯Java。因此,首先,用Java重写它并确保它可以工作。
问题可能是 MainActivity.DisplayLoginDialog()可能期望其父活动处于前台或处于某些特定状态。这在纯Java中更容易修复。
在那之后,您编写的JNI代码应该可以正常运行。