ERROR/AndroidRuntime: Caused by: java.lang.ClassCastException: android.widget.button

本文介绍了一次在不提示错误的情况下修改布局文件后遇到的运行时错误,并分享了解决此问题的过程。通过删除并重新导入工程文件最终解决了问题。
修改了一下布局文件
是在效果界面上改动的,拖动了一下。没有提示错误,而且这样一定不会有错误的吧
但是启动运行后,竟然提示有错。
如图:
ERROR/AndroidRuntime: <wbr>Caused <wbr>by: <wbr>java.lang.ClassCastException: <wbr>android.widgt



对这个很是不解,只是改动了布局,怎么会出错了呢
在网上找原因
有人说要把Package Explorer把该工程文件夹删除,这时出现下图
ERROR/AndroidRuntime: <wbr>Caused <wbr>by: <wbr>java.lang.ClassCastException: <wbr>android.widgt

注意不能勾选对话框中的选项,否则会把整个工程文件从工程目录里删除掉!

你懂得

之后点击OK!

再之后,把工程文件重新import...进工作区!

汗颜。。。。
没想到这样竟然真的好了!!

E/ptest_opencv_q: No implementation found for boolean org.qtproject.qt.android.QtNative.updateNativeActivity() (tried Java_org_qtproject_qt_android_QtNative_updateNativeActivity and Java_org_qtproject_qt_android_QtNative_updateNativeActivity__) E/AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread E/AndroidRuntime: Process: org.qtproject.example.apptest_opencv_qt, PID: 5727 E/AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_ZTVNSt6__ndk13pmr25monotonic_buffer_resourceE" referenced by "/data/app/~~wfv6B0h2MOUHKuj6iIb4IQ==/org.qtproject.example.apptest_opencv_qt-FRluUBOgAOyYNfSpihOGUg==/base.apk!/lib/arm64-v8a/libQt6Core_arm64-v8a.so"... E/AndroidRuntime: at java.lang.Runtime.loadLibrary0(Runtime.java:1077) E/AndroidRuntime: at java.lang.Runtime.loadLibrary0(Runtime.java:998) E/AndroidRuntime: at java.lang.System.loadLibrary(System.java:1656) E/AndroidRuntime: at org.qtproject.qt.android.QtLoader.loadLibraryHelper(QtLoader.java:478) E/AndroidRuntime: at org.qtproject.qt.android.QtLoader.lambda$loadLibraries$1$org-qtproject-qt-android-QtLoader(QtLoader.java:554) E/AndroidRuntime: at org.qtproject.qt.android.QtLoader$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) E/AndroidRuntime: at org.qtproject.qt.android.QtThread.lambda$run$0(QtThread.java:57) E/AndroidRuntime: at org.qtproject.qt.android.QtThread$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) E/AndroidRuntime: at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25) E/AndroidRuntime: at java.lang.Thread.run(Thread.java:920)
最新发布
09-23
### 解决 “No implementation found for boolean org.qtproject.qt.android.QtNative.updateNativeActivity()” #### 检查JNI方法映射 要保证在本地代码(C或C++)中实现了 `org.qtproject.qt.android.QtNative.updateNativeActivity()` 对应的JNI方法。JNI方法命名遵循特定规则,该Java方法对应的JNI方法名应为 `Java_org_qtproject_qt_android_QtNative_updateNativeActivity`。示例代码如下: ```c #include <jni.h> JNIEXPORT jboolean JNICALL Java_org_qtproject_qt_android_QtNative_updateNativeActivity(JNIEnv *env, jobject thiz) { return JNI_TRUE; } ``` #### 检查本地库加载 确认本地库(.so文件)已正确加载。在Java代码中,通常使用 `System.loadLibrary()` 方法加载本地库,示例如下: ```java static { System.loadLibrary("your_native_library_name"); } ``` 要确保 `your_native_library_name` 是包含 `updateNativeActivity` 实现的本地库名称。 #### 检查ABI兼容性 确保本地库是为设备的ABI(Application Binary Interface)编译的。不同设备可能使用不同的ABI,如armeabi - v7a、arm64 - v8a、x86等。可在 `build.gradle` 文件中配置支持的ABI: ```groovy android { defaultConfig { ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } ``` #### 检查JNI注册 若使用了动态JNI注册,要保证注册过程正确。动态JNI注册可自定义JNI方法名,不遵循默认命名规则。示例代码如下: ```c #include <jni.h> jboolean Java_org_qtproject_qt_android_QtNative_updateNativeActivity(JNIEnv *env, jobject thiz) { return JNI_TRUE; } static JNINativeMethod methods[] = { {"updateNativeActivity", "()Z", (void *)Java_org_qtproject_qt_android_QtNative_updateNativeActivity} }; JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { JNIEnv *env; if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) { return JNI_ERR; } jclass clazz = env->FindClass("org/qtproject/qt/android/QtNative"); if (clazz == NULL) { return JNI_ERR; } if (env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0) { return JNI_ERR; } return JNI_VERSION_1_6; } ``` ### 解决 “java.lang.UnsatisfiedLinkError: dlopen failed” #### 检查库依赖 此错误通常表示加载本地库时找不到所需符号。要检查本地库是否依赖其他库,确保所有依赖库都已正确包含在项目中。 #### 检查NDK版本 `_ZTVNSt6__ndk13pmr25monotonic_buffer_resourceE` 是一个C++符号,可能与NDK版本相关。确保使用的NDK版本与项目的C++标准库兼容。可在 `local.properties` 文件中指定NDK版本: ```properties ndk.dir=/path/to/your/ndk ``` #### 检查链接选项 在编译本地库时,要确保正确链接所需的库。例如,使用CMake构建项目时,可在 `CMakeLists.txt` 文件中添加必要的链接选项: ```cmake target_link_libraries(your_native_library_name # 其他依赖库 z log) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值