在android

时间:2015-06-09 06:28:27

标签: java android c++

我想通过使用android 中的本机代码创建ArrayList,因为我必须允许所有类型的值插入列表中。

以下是我的代码:

std::vector<jobject> list;

extern "C"{

    JNIEXPORT void JNICALL Java_com_example_nativetestapp_NativeList_add(
            JNIEnv * env, jobject obj, jobject t) {
        __android_log_print(ANDROID_LOG_INFO,"LOG","Set %d",t); //here it is printing some integer value like -1034567334
        list.push_back(t);
    }

    JNIEXPORT jboolean JNICALL     Java_com_example_nativetestapp_NativeList_removeByIndex(
            JNIEnv * env, jobject obj, jint pos) {
        if (pos > list.size() - 1 || pos < 0)
            return false;
        return list.erase(list.begin() + pos) != NULL ? true : false;
    }

    JNIEXPORT jint JNICALL Java_com_example_nativetestapp_NativeList_size(
            JNIEnv * env, jobject obj) {
        return list.size() == NULL ? 0 : list.size();
    }

    JNIEXPORT jobject JNICALL Java_com_example_nativetestapp_NativeList_get(
            JNIEnv * env, jobject obj, int pos) {
        return list.at(pos);
    }

    JNIEXPORT jboolean JNICALL Java_com_example_nativetestapp_NativeList_contains(
            JNIEnv * env, jobject obj, jobject t) {

        for (int var = 0; var < list.size(); var++) {
            if(t==list[var])
                return true;
        }
        return false;
    }

    JNIEXPORT jboolean JNICALL Java_com_example_nativetestapp_NativeList_remove(
            JNIEnv * env, jobject obj, jobject t) {
        for (int var = 0; var < list.size(); var++) {
            if(t==list[var]){
                list.erase(list.begin()+var);
                return true;
            }
        }
        return false;
    }

};

我已经在java jni中使用jobject来允许所有类型的值,但是在插入列表时,它插入的引用就像某个数字,而不是确切的值。
并且在检索时,它仅返回参考 我尝试了很多方法,但它没有用。
请帮我解决这个问题!

提前致谢。

0 个答案:

没有答案