Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试转换C+;时,decodeIndirectRef中的间接引用无效+;到爪哇 我试图把一些C++对象转换成java对象。 但我有一个奇怪的问题,我不知道为什么会发生 我所做的是获取C++对象的列表,从中创建java对象并将其添加到数组中。 它一直工作得很好,直到我在C++对象中添加了一个新的字符串(GeEngalAccess())。从那时起,它就不起作用了_Android_C++_Android Ndk_Java Native Interface - Fatal编程技术网

Android 尝试转换C+;时,decodeIndirectRef中的间接引用无效+;到爪哇 我试图把一些C++对象转换成java对象。 但我有一个奇怪的问题,我不知道为什么会发生 我所做的是获取C++对象的列表,从中创建java对象并将其添加到数组中。 它一直工作得很好,直到我在C++对象中添加了一个新的字符串(GeEngalAccess())。从那时起,它就不起作用了

Android 尝试转换C+;时,decodeIndirectRef中的间接引用无效+;到爪哇 我试图把一些C++对象转换成java对象。 但我有一个奇怪的问题,我不知道为什么会发生 我所做的是获取C++对象的列表,从中创建java对象并将其添加到数组中。 它一直工作得很好,直到我在C++对象中添加了一个新的字符串(GeEngalAccess())。从那时起,它就不起作用了,android,c++,android-ndk,java-native-interface,Android,C++,Android Ndk,Java Native Interface,这是我的密码: jobject convertCPPTripsToJobject_v2(JNIEnv *env, std::list<Trip> *trips_cpp) { // create an ArrayList jclass clsArrayList = env->FindClass("java/util/ArrayList"); jmethodID methodIdInitArray = env->GetMethodID(cls

这是我的密码:

    jobject convertCPPTripsToJobject_v2(JNIEnv *env, std::list<Trip> *trips_cpp) {

    // create an ArrayList
    jclass clsArrayList = env->FindClass("java/util/ArrayList");
    jmethodID methodIdInitArray = env->GetMethodID(clsArrayList, "<init>", "()V");
    jobject listTrips = env->NewObject(clsArrayList, methodIdInitArray);

    if (clsArrayList != 0) {
        // we get the id of the add method from the ArrayList
        jmethodID midArrayListAdd = env->GetMethodID(clsArrayList, "add", "(Ljava/lang/Object;)Z");
        if (midArrayListAdd != 0) {
            // create different Java object from the cpp list 
            for (auto trip_cpp : *trips_cpp) {
                // create a ParcourGreen object
                jclass clsParcour = env->FindClass("net/pompoc/greenui/modele/ParcourGreen");
                jmethodID methodIdInitParcour = env->GetMethodID(clsParcour, "<init>", "(IILjava/lang/String;Ljava/lang/String;FZLjava/lang/String;)V");

                jobject parcour = env->NewObject(clsParcour, methodIdInitParcour,
                    trip_cpp.getId(),
                    trip_cpp.getType(),
                    env->NewStringUTF(trip_cpp.getStartDate().c_str()),
                    env->NewStringUTF(trip_cpp.getEndDate().c_str()),
                    trip_cpp.getSteps(),
                    trip_cpp.getIsPostProcessed() ? JNI_TRUE : JNI_FALSE,
                    env->NewStringUTF(trip_cpp.getCoordinates().c_str())
                    );

                env->CallBooleanMethod(listTrips, midArrayListAdd, parcour);
            }
        }
    }

    return listTrips;
}
(当然不完全是0x00000000)

任何帮助都将不胜感激

编辑

下面是我的错误信息:

    11-24 16:20:44.863: W/dalvikvm(16337): Invalid indirect reference 0xbea54328 in decodeIndirectRef
    11-24 16:20:44.863: I/dalvikvm(16337): "main" prio=5 tid=1 RUNNABLE
    11-24 16:20:44.863: I/dalvikvm(16337):   | group="main" sCount=0 dsCount=0 obj=0x41835ea0 self=0x417304c8
    11-24 16:20:44.863: I/dalvikvm(16337):   | sysTid=16337 nice=0 sched=0/0 cgrp=apps handle=1074065748
    11-24 16:20:44.863: I/dalvikvm(16337):   | state=R schedstat=( 0 0 0 ) utm=100 stm=42 core=0
    11-24 16:20:44.863: I/dalvikvm(16337):   at net.pompoc.greenui.modele.ParcourGreen.<init>(ParcourGreen.java:-1)
    11-24 16:24:36.289: E/dalvikvm(19526): VM aborting
    11-24 16:24:36.289: A/libc(19526): Fatal signal 6 (SIGABRT) at 0x00004c46 (code=-6), thread 19526 (com.greenui)
11-24 16:20:44.863:W/dalvikvm(16337):decodeIndirectRef中的间接引用0xbea54328无效
11-24 16:20:44.863:I/dalvikvm(16337):“主”优先级=5 tid=1可运行
11-24 16:20:44.863:I/dalvikvm(16337):| group=“main”scont=0 dsCount=0 obj=0x41835ea0 self=0x417304c8
11-24 16:20:44.863:I/dalvikvm(16337):| sysTid=16337 nice=0 sched=0/0 cgrp=apps handle=1074065748
11-24 16:20:44.863:I/dalvikvm(16337):| state=R schedstat=(0 0 0)utm=100 stm=42 core=0
11-24 16:20:44.863:I/dalvikvm(16337):在net.pompoc.greenui.modele.ParcourGreen.(ParcourGreen.java:-1)
11-24 16:24:36.289:E/dalvikvm(19526):VM中止
11-24 16:24:36.289:A/libc(19526):0x00004c46处的致命信号6(SIGABRT)(代码=-6),线程19526(com.greenui)
编辑2

经过进一步调查,这似乎是我所有麻烦的原因:

jobject parcour = env->NewObject(clsParcour, methodIdInitParcour,
                trip_cpp.getId(),
                trip_cpp.getType(),
                env->NewStringUTF(trip_cpp.getStartDate().c_str()),
                env->NewStringUTF(trip_cpp.getEndDate().c_str()),
                trip_cpp.getSteps(),
                trip_cpp.getIsPostProcessed() ? JNI_TRUE : JNI_FALSE,
                ---> env->NewStringUTF(trip_cpp.getCoordinates().c_str()) <---
            );
jobject parcour=env->NewObject(clsParcour,methodIdInitParcour,
trip_cpp.getId(),
trip_cpp.getType(),
env->NewStringUTF(trip_cpp.getStartDate().c_str()),
env->NewStringUTF(trip_cpp.getEndDate().c_str()),
trip_cpp.getSteps(),
trip_cpp.getIsPostProcessed()?JNI_TRUE:JNI_FALSE,

--->env->NewStringUTF(trip_cpp.getCoordinates().c_str())能否启用CheckJNI模式?这可能会为您提供更详细的诊断信息。此外,如果列表较大,您可能会溢出本地引用表;您可以通过显式删除在循环中创建的本地引用来避免这一情况。您还应该将FindClass和GetMethodID调用移到循环之外——它们是expensive,不需要在内部。我试图启用CheckJNI,但Logcat一直告诉我CheckJNI已关闭。我不知道它是否会帮助您,但当我在终端中执行“adb设备”时,我可以看到我的设备。当我在“adb外壳”中执行此操作时,我看不到它。。。
jobject parcour = env->NewObject(clsParcour, methodIdInitParcour,
                trip_cpp.getId(),
                trip_cpp.getType(),
                env->NewStringUTF(trip_cpp.getStartDate().c_str()),
                env->NewStringUTF(trip_cpp.getEndDate().c_str()),
                trip_cpp.getSteps(),
                trip_cpp.getIsPostProcessed() ? JNI_TRUE : JNI_FALSE,
                ---> env->NewStringUTF(trip_cpp.getCoordinates().c_str()) <---
            );