我想通过使用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来允许所有类型的值,但是在插入列表时,它插入的引用就像某个数字,而不是确切的值。
并且在检索时,它仅返回参考
我尝试了很多方法,但它没有用。
请帮我解决这个问题!
提前致谢。