Android OS v4 でアプリを実行すると、このエラー JNI ERROR (app bug):accessed stale global referenceが発生しますが、Android v2.3 で同じアプリケーションを実行すると、このエラーは発生しません。
このエラーは、文字列配列を引数として渡す AsyncTask クラスを呼び出した時点で発生します。
誰でも私を助けることができますか??
Android OS v4 でアプリを実行すると、このエラー JNI ERROR (app bug):accessed stale global referenceが発生しますが、Android v2.3 で同じアプリケーションを実行すると、このエラーは発生しません。
このエラーは、文字列配列を引数として渡す AsyncTask クラスを呼び出した時点で発生します。
誰でも私を助けることができますか??
このエラーは、パラメーターの型が正しくないメソッドを呼び出すと発生します。
メソッドの署名が、渡すものと正確に一致していることを確認してください。文字列配列の場合:
jmethodID mid = env->GetMethodID(cls, methodName, "([Ljava/lang/String;)V");
自分で作成する場合は、次のようになります。
jclass stringCls = env->FindClass("java/lang/String");
jobjectArray mStringArray = env->NewObjectArray( mSize, stringCls, NULL);
特定のケースでは、API 11 (Android 3.0) まで利用できなかった AsyncTask.execute() を呼び出しており、jmethodID が null であるため、Android 2.3 でクラッシュが発生する可能性はほとんどありません。(取得後、常に jclass と jmethodID の null をチェックすることをお勧めします)
このエラーは、パラメーターの型が正しくないメソッドを呼び出すと発生します。
さらに、この場合、ネイティブ コードとは異なる Java コードにネイティブ メソッドを登録している可能性があります。違いは、Java コードとネイティブ コードの間で宣言するパラメーターの数が多いか少ないかです。