uni-app 小米手机拍照确定后闪退出现org.json.JSONException: No value for xaga
uni-app 小米手机拍照确定后闪退出现org.json.JSONException: No value for xaga
roid/os/Trace;->isTagEnabled(J)Z (unsupported, reflection, allowed)
Accessing hidden method Landroid/os/Trace;->traceBegin(JLjava/lang/String;)V (unsupported, reflection, allowed)
Accessing hidden method Landroid/os/Trace;->traceEnd(J)V (unsupported, reflection, allowed)
Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (unsupported, reflection, allowed)
Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (unsupported, reflection, allowed)
Loaded version=99.0.4844.88 minSdkVersion=29 isBundle=true multiprocess=true packageId=2
Successfully loaded native library
Flushed 8 samples from 8 histograms.
initUTS error java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.reflect.Field java.lang.Class.getField(java.lang.String)' on a null object reference
BaseActivity onCreate
onRuntimePreCreate appid=Main_App
org.json.JSONException: No value for xaga
at org.json.JSONObject.get(JSONObject.java:403)
at org.json.JSONObject.getJSONObject(JSONObject.java:623)
at android.util.MiuiMultiWindowUtils.initFreeFormResolutionArgsOfDevice(MiuiMultiWindowUtils.java:1423)
at android.util.MiuiMultiWindowUtils.initFreeFormResolutionArgs(MiuiMultiWindowUtils.java:1417)
at android.util.MiuiMultiWindowUtils.<clinit>(MiuiMultiWindowUtils.java:212)
at android.util.MiuiMultiWindowUtils.isSupportMultiSwitchFeature(MiuiMultiWindowUtils.java:3214)
at com.android.internal.policy.DecorViewMultiWinStubImpl.<init>(DecorViewMultiWinStubImpl.java:19)
at com.android.internal.policy.DecorViewMultiWinStubImpl$Provider.provideNewInstance(DecorViewMultiWinStubImpl$Provider.java:14)
at com.android.internal.policy.DecorViewMultiWinStubImpl$Provider.provideNewInstance(DecorViewMultiWinStubImpl$Provider.java:8)
at com.miui.base.MiuiStubRegistry.get(MiuiStubRegistry.java:130)
at com.miui.base.MiuiStubUtil.newInstance(MiuiStubUtil.java:77)
at com.android.internal.policy.DecorViewMultiWinStub.newInstance(DecorViewMultiWinStub.java:11)
at com.android.internal.policy.DecorView.<init>(DecorView.java:333)
at com.android.internal.policy.PhoneWindow.generateDecor(PhoneWindow.java:2380)
at com.android.internal.policy.PhoneWindow.installDecor(PhoneWindow.java:2760)
at com.android.internal.policy.PhoneWindow.getDecorView(PhoneWindow.java:2140)
at io.dcloud.WebAppActivity.onCreateSplash(Unknown Source:8)
at io.dcloud.b.onCreate(Unknown Source:130)
at io.dcloud.WebAppActivity.onCreate(Unknown Source:22)
at android.app.Activity.performCreate(Activity.java:8167)
at android.app.Activity.performCreate(Activity.java:8134)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3763)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3957)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:106)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2335)
1 回复
针对你提到的uni-app在小米手机上拍照后确定导致闪退,并出现org.json.JSONException: No value for xaga
的问题,这通常是由于JSON解析过程中缺少预期的关键字所导致的。以下是一些可能的解决方案,主要通过代码示例来展示如何捕获和处理这类异常,以避免应用崩溃。
1. 检查并修复JSON解析代码
首先,你需要检查触发异常的JSON解析代码。假设你在拍照完成后从相机或相册获取了一张图片,并尝试从一个返回的JSON对象中提取数据:
// 假设这是从相机返回的数据(实际数据可能来自uni.getImageInfo的回调)
let imageData = {
// 正常情况下应该包含如path, width, height等字段
path: '/path/to/image',
width: 1080,
height: 1920
// 注意:这里没有'xaga'字段
};
try {
let xagaValue = imageData.xaga; // 直接访问可能不存在的字段
console.log('Xaga value:', xagaValue);
} catch (error) {
if (error instanceof SyntaxError && error.message.includes('No value for')) {
console.error('Missing required field in JSON:', error.message);
// 可以根据需求进行错误处理,如显示错误提示、使用默认值等
} else {
throw error; // 重新抛出未知错误
}
}
2. 使用安全的JSON访问方法
为了避免直接访问不存在的JSON字段导致应用崩溃,可以使用更安全的访问方法,如使用lodash
库的get
函数,或在JavaScript中手动检查字段存在性:
// 使用手动检查
if (imageData && imageData.hasOwnProperty('xaga')) {
console.log('Xaga value:', imageData.xaga);
} else {
console.warn('No xaga field in imageData');
// 处理缺少字段的情况
}
// 或者使用lodash的get函数(需先安装lodash库)
const _ = require('lodash');
let xagaValue = _.get(imageData, 'xaga', 'default_value'); // 提供默认值
console.log('Xaga value:', xagaValue);
3. 调试和日志记录
为了更好地理解问题发生的上下文,增加日志记录是很有帮助的。确保在关键路径上添加足够的日志,以便在出现问题时可以回溯和分析。
结论
通过上述方法,你可以有效地捕获和处理org.json.JSONException: No value for xaga
这类异常,防止应用因为JSON解析错误而闪退。同时,检查返回的数据结构是否符合预期,确保所有必要的字段都存在,也是预防此类问题的重要步骤。如果问题依旧存在,可能需要进一步检查uni-app的相机插件或小米手机的特定兼容性问题。