2013-03-25 16 views
5

C++' dan Java 'ya aramak istiyorum. Parametreler olmadan boole değerini geri çeken bir işlevi çağırmaya çalışıyorum.JNI dönüş Sinyali 7 işlevi C++ 'dan Java'ya çağırmaya çalışıyorum

Bu benim C++ Kod

/** 
* 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; 
} 

Ve benim Java kodu:

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; 
    } 
} 

Ama olsun:

Fatal signal 7 (SIGBUS) at 0x00000000 (code=128) 

Ve yanlış bir dönüş değeri elde edebilirsiniz Eğer ben Ben de parametreleri gönderemem.

+1

Aslında bir nesne olan bir Boolean döndürüyorsunuz. Bunun yerine bir boole ilkel türünü döndürmeye çalışın. – maba

+0

Java'da bir boole vaari eklemeyi denedim, ancak bu – vgonisanz

+0

değil Hatalı olan "mid = env-> GetStaticMethodID (mClass," isInternetConnection ","() Z "); Eğer bunu yorumluyorum, ve eğer aşağıdaki gibi değilse, sinyal – vgonisanz

cevap

3

Aslında bir nesne olan bir Boole döndürüyorsunuz. Bunun yerine bir boole ilkel türünü döndürmeye çalışın.

0

FindClass'ın NULL döndürmediğinden emin misiniz? Kontrol etmiyorsunuz