uni-app x下导入、使用云对象报错
uni-app x下导入、使用云对象报错
示例代码:
const example = uniCloud.importObject("example", {
customUI: true
})
console.error(example)
example.test('aaa').then<void>((result : UTSJSONObject) : void => {
console.error(result)
}).catch<void>((err : any | null) : void => {
const error = err as UniCloudError
console.error(error)
})
操作步骤:
- 克隆项目:https://gitcode.net/AaBbCclqx2020/Uniappx/-/tree/master/
- 分别使用标准基座和自定义基座打包
- 运行测试
预期结果:
如上
实际结果:
如上报错信息
bug描述:
使用官方示例hello-uni-app-x项目,无论打自定义基座还是标准基座,云对象示例都正常运行,
在项目里导入、使用云对象,均出现不同情况报错
以下是出现报错的代码
const example = uniCloud.importObject("example", {
customUI: true
})
console.error(example)
example.test('aaa').then<void>((result : UTSJSONObject) : void => {
console.error(result)
}).catch<void>((err : any | null) : void => {
const error = err as UniCloudError
console.error(error)
})
以上云对象和其导入、使用的方法是参考hello-uni-app-x项目中的示例的
【标准基座】
刚开始,是直接用的标准基座进行真机运行调试,
在uni-app x项目下导入云对象成功
输出云对象方法,所有方法正常输出
{"test":"f () { [native code] } "} at pages/index/index.uvue:79
调用test方法,正常输出:
[Object] {"errCode":0,"errMsg":"This is a test text."}
【自定义基座】
因为插件需要导入第三方依赖,换成了自定义基座打包
在uni-app x项目下导入云对象成功
输出云对象方法,所有方法正常输出
{"test":"f () { [native code] } "} at pages/index/index.uvue:79
调用test方法后报错:java.lang.NoClassDefFoundError: Failed resolution of: Lio/dcloud/uniapp/extapi/UniStorageKt;
error: java.lang.NoClassDefFoundError: Failed resolution of: Lio/dcloud/uniapp/extapi/UniStorageKt;
at pages/index/index.uvue:80:4
})
console.error(example)
example.test('This is a test text.').then<void>((result : UTSJSONObject) : void => {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
console.error(result)
}).catch<void>((err : any | null) : void => {
开始以为是项目的其他原因(毕竟打包的hello-uni-app-x项目是正常运行的)
便按照模板,新建一个uni-app x项目,在index.uvue文件中使用同样代码,
标准基座
还是先用标准基座,结果符合预期,没有报错
[Object] {"errCode":0,"errMsg":"This is a test text."}
自定义基座
打包自定义基座后,运行后出现报错
07:11:57.263 java.lang.NoClassDefFoundError: Failed resolution of: Lio/dcloud/unicloud/UniCloudClientKt;
at uni.UNI5DF8C7C.IndexKt.<clinit>(index.kt:76)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at java.lang.Class.forName(Class.java:379)
at io.dcloud.uniapp.appframe.UniAppEngineHost.invokeAppMain$lambda$0(UniAppEngineHost.kt:93)
at io.dcloud.uniapp.appframe.UniAppEngineHost.$r8$lambda$B5PJVjjKP17XAQPUBDiJnlRXnaw(Unknown Source:0)
at io.dcloud.uniapp.appframe.UniAppEngineHost$$ExternalSyntheticLambda2.run(Unknown Source:8)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:223)
at android.os.Looper.loop(Looper.java:324)
at android.app.ActivityThread.main(ActivityThread.java:8599)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1061)
Caused by: java.lang.ClassNotFoundException: Didn't find class "io.dcloud.unicloud.UniCloudClientKt" on path: DexPathList[[dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/index/classes.dex", dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/pages/index/index/classes.dex", dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/uniCloud/cloudfunctions/GenCloudObjUniCaptchaCo/classes.dex", dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/uniCloud/cloudfunctions/GenCloudObjUniIdCo/classes.dex", dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/uniCloud/cloudfunctions/GenCloudObjUniOpenBridge/classes.dex", dex file "/storage/emulated/0/Android/data/com.singmy.uniappxtest/apps/__UNI__5DF8C7C/www/uniCloud/cloudfunctions/GenCloudObjUniPushCo/classes.dex", zip file "/data/app/~~7gjQd4lcEle6o1zn4vFBqw==/com.singmy.uniappxtest-2_wSbsqCwnmw8X1LfYaYSQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~7gjQd4lcEle6o1zn4vFBqw==/com.singmy.uniappxtest-2_wSbsqCwnmw8X1LfYaYSQ==/lib/arm64, /data/app/~~7gjQd4lcEle6o1zn4vFBqw==/com.singmy.uniappxtest-2_wSbsqCwnmw8X1LfYaYSQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 15 more
07:12:24.413 watch Error: EPERM: operation not permitted, watch
07:12:24.413 at FSEvent.FSWatcher._handle.onchange (node:internal/fs/watchers:204:21) {
07:12:24.413 errno: -4048,
07:12:24.413 syscall: 'watch',
07:12:24.413 code: 'EPERM',
07:12:24.413 filename: null
07:12:24.413 }
同类问题
使用uni.request API也会出现同样问题
出错代码段
onLoad() {
uni.request({
url: 'https://www.baidu.com',
method: 'GET',
header: {
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 9;)"
},
success(res) {
console.log('OUTPUT', res)
}
});
}
标准基座运行结果(正常输出)
OUTPUT, [Object] {"cookies":[],"data":"<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=cont...} at pages/index/index.uvue:35
自定义基座运行结果(报错)
error: java.lang.NoClassDefFoundError: Failed resolution of: Luts/sdk/modules/DCloudUniNetwork/RequestOptions;
at pages/index/index.uvue:28:3
| })
| */
| uni.request({
| ^^^^^^^^^^^^^
| url: 'https://www.baidu.com',
| method: 'GET',
以上这个测试项目已上传gitcode,
复现请按照以上步骤测试:https://gitcode.net/AaBbCclqx2020/Uniappx/-/tree/master/
更多关于uni-app x下导入、使用云对象报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app x下导入、使用云对象报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app x
中导入和使用云对象时,如果遇到报错,可能是由于多种原因引起的。以下是一些常见的排查步骤和解决方案:
1. 确保云对象已正确部署
首先,确保你的云对象已经正确部署到云端。你可以在 uniCloud
控制台中查看云对象的状态,确保它已经成功部署。
2. 检查云对象的路径
在 uni-app x
中,导入云对象时需要使用正确的路径。通常,云对象的路径格式如下:
const cloudObject = uniCloud.importObject('your-cloud-object-name');
确保 your-cloud-object-name
与你在 uniCloud
控制台中定义的云对象名称一致。
3. 检查云对象的权限
云对象的权限设置可能会影响其调用。确保云对象的权限设置允许客户端调用。你可以在 uniCloud
控制台中检查并调整云对象的权限。
4. 检查网络连接
确保你的设备或模拟器能够正常访问互联网,并且能够连接到 uniCloud
服务。网络问题可能导致云对象调用失败。
5. 查看错误日志
如果云对象调用失败,查看控制台或日志中的错误信息。错误信息通常会提供一些线索,帮助你定位问题。
6. 检查云对象的代码
确保云对象的代码没有错误。你可以在 uniCloud
控制台中直接测试云对象,确保它能够正常运行。
7. 检查 uni-app x
的版本
确保你使用的 uni-app x
版本是最新的,或者至少是支持云对象调用的版本。旧版本可能存在兼容性问题。
8. 示例代码
以下是一个简单的示例,展示如何在 uni-app x
中导入和使用云对象:
// 导入云对象
const cloudObject = uniCloud.importObject('your-cloud-object-name');
// 调用云对象的方法
cloudObject.yourMethodName({ param1: 'value1', param2: 'value2' })
.then(res => {
console.log('云对象调用成功:', res);
})
.catch(err => {
console.error('云对象调用失败:', err);
});