尝试从cpp类调用java中的函数以在memmory中保存布尔值时出现以下错误。我正在使用一个名为MyAdapter.cpp的类来调用MyAdapterJni.cpp的函数。我有以下MyAdapterJni.cpp中编写的函数
bool GetBooleanJni(const char *key, bool defaultValue)
{
cocos2d::JniMethodInfo methodInfo;
jboolean ret = false;
if (! getStaticMethodInfo(methodInfo, "GetBoolean", "(Ljava/lang/String;Z)Z"))
{
return ret;
}
ret = methodInfo.env->CallStaticBooleanMethod(methodInfo.classID, methodInfo.methodID, defaultValue);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
return ret;
}
我在myManager.java类中有以下函数
public static boolean GetBoolean(String key, boolean defaultValue)
{
return sharedPreferences.getBoolean(key, defaultValue);
}
我在logcat上获得以下日志
12-14 12:06:32.024:W / dalvikvm(9575):异常Ljava / lang / NullPointerException;在初始化Lcom / mygames / Game / MyManager时抛出;
12-14 12:06:32.024:D / libMyManager(9575):无法找到GetBoolean的静态方法ID
我的java类在com.mygames.Game包里面
任何人都可以告诉我可能导致此错误的原因
答案 0 :(得分:1)
MyManager
的初始化会抛出NullPointerException
,这可能会阻止确定方法ID,因此您可能希望查看它。请注意,不仅类初始值设定项可以抛出此值,还会初始化任何静态字段。您可以将所有初始化放入类初始值设定项中,然后从那里进行调试,必须有null
。
答案 1 :(得分:0)
尝试获取运行它的活动的实例(比如cocos2dxActivity)并在runonUiThread中执行....
public static boolean GetBoolean(String key, boolean defaultValue) {
Cocos2dxActivity.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
return sharedPreferences.getBoolean(key, defaultValue);
}
});
}
}
注意:它可能会给你一些制作函数参数的错误。希望你能理解,如果没有请随意问...
答案 2 :(得分:0)
我也有这个问题,在我的例子中,在主UI线程上运行我的java方法功能解决了我的问题。例如在你的java方法中
Activity ac=(Activity) context;
ac.runOnUiThread(new Runnable()
{
public void run()
{
//your code here
}
});