JNI返回Signal 7函数试图从C调用Java
发布时间:2020-05-24 01:51:48 所属栏目:Java 来源:互联网
导读:我想打个电话从C到 Java.我尝试调用一个函数来反转一个没有参数的bool值. 这是我的C代码 /** * Check if Internet Connection is ONLINE */bool InterfaceJNI::isInternetConnected(){ JavaVM* jvm = JniHelper::getJavaVM(); int status;
|
我想打个电话从C到 Java.我尝试调用一个函数来反转一个没有参数的bool值. 这是我的C代码 /**
* Check if Internet Connection is ONLINE
*/
bool InterfaceJNI::isInternetConnected()
{
JavaVM* jvm = JniHelper::getJavaVM();
int status;
JNIEnv *env;
jmethodID mid;
bool isAttached = false;
// jboolean o bool?
bool returnValue = false;
CCLog("Static isInternetConnected");
// Get Status
status = jvm->GetEnv((void **) &env,JNI_VERSION_1_6);
if(status < 0)
{
//LOGE("callback_handler: failed to get JNI environment," // "assuming native thread");
status = jvm->AttachCurrentThread(&env,NULL);
CCLog("isInternetConnected Status 2: %d",status);
if(status < 0)
{
// LOGE("callback_handler: failed to attach " // "current thread");
return false;
}
isAttached = true;
CCLog("isInternetConnected Status isAttached: %d",isAttached);
}
CCLog("isInternetConnected Status: %d",status);
jclass mClass = env->FindClass("org/example/SocialNetwork/InternetConnection");
// Get Static bool isInternetConnection()
mid = env->GetStaticMethodID(mClass,"isInternetConnection","()Z");
if (mid == 0)
{
CCLog("isInternetConnected FAIL GET METHOD STATIC");
return false;
}
// Call Static bool isInternetConnection()
returnValue = env->CallStaticBooleanMethod(mClass,mid);
CCLog("isInternetConnected Done ");
//-----------------------------------------------------------
CCLog("Finish");
if(isAttached)
jvm->DetachCurrentThread();
// Change for return value
return returnValue;
}
我的Java代码: public class InternetConnection
{
/**
* Check if is working your hello world from C++
*/
public static void helloWorld()
{
Log.v("InternetConnection","HELLO WORLD");
}
/**
* Check Internet Connection
* @return true is Online
*/
public static Boolean isInternetConnection()
{
Log.v("InternetConnection","isInternetConnection Start");
Context ctx = CCSocialNetwork.getAppContext();
ConnectivityManager conMgr = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo i = conMgr.getActiveNetworkInfo();
if (i == null)
{
Log.v("InternetConnection","isInternetConnection NULL :S");
return false;
}
if (!i.isConnected())
{
Log.v("InternetConnection","isInternetConnection is not connected");
return false;
}
if (!i.isAvailable())
{
Log.v("InternetConnection","isInternetConnection is not available");
return false;
}
Log.v("InternetConnection","isInternetConnection DONE!");
return true;
}
}
但我得到: Fatal signal 7 (SIGBUS) at 0x00000000 (code=128) 我有如果我能正确获得返回值,我也无法发送参数. 解决方法您正在返回一个实际上是对象的布尔值.尝试返回布尔基元类型.(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
