我正在使用jni,我可以在C++類的常規活動中調用java函數,但是當我嘗試在非活動類中調用java函數時,我的代碼不起作用。Android JNI:無法在非Activity類中調用函數
我的意思是
jclass activityclass = env->FindClass("com/example/test/MyActivity);
jmethodID methodID = env->GetMethodID(activityclass,"FunctionName","()V");
env ->CallVoidMethod(obj,methodID);
這工作。 當我嘗試從非活動常規java類調用相同的函數(具有相同的名稱),它不起作用。
jclass regularclass = env->FindClass("com/example/test/MyRegularClass);
jmethodID methodID = env->GetMethodID(regularclass ,"FunctionName","()V");
env ->CallVoidMethod(obj,methodID);
爲什麼我不能在非活動類中調用函數?我的錯誤是什麼?
我MyRegularClass
public class MyRegularClass{
public static void FunctionName(){
Log.i("Java Worked","Java Worked");
}
}
我的動態班組長
public class MyActivity{
system.load.library("mylib");
@Override
public void onCreate(Bundle savedInstanceState){
....
....
testJNI();
}
public static void FunctionName(){
Log.i("Activity Worked","Activity Worked");
}
public native void testJNI();
}
這裏沒有足夠的信息。任何與活動有關的事情都需要一個有效的'Context',而你的'regular'類可能沒有一個。顯示更多代碼並解釋你的'FunctionName'等等。 –
FunctionName是一個名稱。我的普通班級沒有上下文。它有一些方法,它只是一個普通的java類。爲什麼我不能調用這個方法?我可以發佈整個班級代碼,但他們只是普通班級和活動 – SavasCinar
首先,定義'不起作用'。包含堆棧跟蹤和真實代碼(摘錄)。 –