当前位置: 首页 > 知识库问答 >
问题:

GetMethodID找不到id-android JNI

丘普松
2023-03-14
package ch.geniali.Test.service;
public class Service extends Service {
    private void sendMessage(String message) {
        Intent intent = new Intent();
        intent.setAction(Const.ACTION_INFO);
        intent.putExtra(Const.INTENT_MESSAGE, message);
        sendBroadcast(intent);
    }
}
#include <jni.h>
#include <string.h>
#include <android/log.h>
#define DEBUG_TAG "C_libG"

JavaVM* gJavaVM = NULL;
static JNIEnv *pEnv;
const char* kJavaClassPath = "ch/geniali/Test/service/Service";

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* pVm, void* reserved){
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Call JNI_OnLoad");

    gJavaVM = pVm;

    if((*pVm)->GetEnv(pVm, (void **)&pEnv, JNI_VERSION_1_6)){
        __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG,
                    "Failed to get the environment");
        return -1;
    }

    jclass gClass = (*pEnv)->FindClass(pEnv, kJavaClassPath);
    if (!gClass)
     {
        __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG,"failed to get %s class reference", kJavaClassPath);
      return -1;
     }

    jmethodID mid = (*pEnv)->GetMethodID(pEnv, gClass, "sendMessage", "(Ljava/lang/String;)V");
    if (mid == 0){
        __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG,"Method ID not found");
        return -1;
    }

    (*pEnv)->CallVoidMethod(pEnv, gClass, mid, "yay!!!");

    return JNI_VERSION_1_6;
}

03-21 20:46:07.059 161 82-16182/ch.geniali.test:任务w/dalvikvm?JNI警告:不能在LJava/Lang/Class的实例上调用lch/geniali/test/service/service;.sendmessage;(CallVoidMethod)

03-21 20:46:07.059 161 82-16182/ch.geniali.test:任务w/dalvikvm?在ljava/lang/runtime;.nativeLoad中:(ljava/lang/string;ljava/lang/classloader;ljava/lang/string;)ljava/lang/string;(CallVoidMethod)

03-21 20:46:07.059 161 82-16182/CH.Geniali.Test:任务I/Dalvikvm?“main”prio=5 tid=1可运行

共有1个答案

邴俊达
2023-03-14

方法ID被正确找到,否则您将看到

__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG,"Method ID not found");

你的Android日志中的消息。

您的错误是尝试在java.lang.class对象上调用sendMessage()方法,方法是执行以下操作

(*pEnv)->CallVoidMethod(pEnv, **gClass**, mid, "yay!!!");
 类似资料:
  • 我试图在spring boot repository类中执行此查询,但console显示错误''邮递员也显示: 查询存储库

  • 我开始建立一个简单的Android应用程序,所以当我按下我的视频按钮时,它会调用一个包含视频播放器的片段,但我总是得到:没有找到id 0x7F090005的视图... 我想知道你能不能帮我找出我正在编写的代码中有什么错误。 下面是我的mainactivity.java文件: 那么我有我的main_activity.xml: 非常感谢事先的帮助。 EGMWeb

  • 当我点击“编辑”时,我收到此错误: 下面是< code>UsersController: 完整跟踪如下:

  • 问题内容: jenkins的新手,正在运行我的第一个版本。我正在使用gradle进行构建,但一直出现以下错误 我搜索了将近2天,并尝试安装其他android插件,但似乎无法解决此问题。 我已经在詹金斯的全局属性下设置了ANDROID_HOME变量。确保路径正确。 任何帮助将不胜感激。提前致谢 问题答案: 我已通过在bundle.gradle文件顶部添加以下代码来修复此问题 谢谢你的帮助 :)

  • 编辑*我简化了例子,我仍然得到同样的问题。 欢迎任何帮助。

  • 我一整天都被困在这个问题上,我似乎找不到一个适合我的情况的答案,足以让我使用。 当我单击一个列表项时,比如Blue,在Portraint中,我希望它显示一个新的片段,这是一个蓝色的屏幕,而在Sandwork中,它在半个屏幕上显示该片段,在另一个屏幕上显示listview。我正在使用ActionBarSherlock和碎片来完成这一点。 我从里到外构建了它,所以我从一个列表开始,它按照我想要的方式工