仅在启用 proguard 时 JSONArray 不是字符串异常

Posted

技术标签:

【中文标题】仅在启用 proguard 时 JSONArray 不是字符串异常【英文标题】:JSONArray not a string exception only when proguard is enabled 【发布时间】:2017-01-28 08:24:25 【问题描述】:

JSONArray.getString(1); 其中 ["n​​ame",null] 是 json 数组,只有在启用 proguard 时才会抛出 JSONArray[1] not a string 异常。

我是否在我的 proguard 规则中遗漏了什么?

【问题讨论】:

你在使用 GSON 吗? 请发布您当前的 proguard 规则 看看这可能会有所帮助:***.com/q/58720274/6071729 请发布您的代码。 字符串 resCode = signObject.getString("status"); .where 状态键是一个 int。 JSONArray 或 JSONObject 也是如此。 【参考方案1】:

这些方法你试过了吗:

/**
 * Returns the value at @code index if it exists, coercing it if
 * necessary. Returns the empty string if no such value exists.
 */
public String optString(int index)

/**
 * Returns the value at @code index if it exists, coercing it if
 * necessary. Returns @code fallback if no such value exists.
 */
public String optString(int index, String fallback)

似乎不会为字符串返回null

【讨论】:

是的,我有,它们确实有效。但是现有的项目已经全部getString了。切换到optString是最后的选择。 通过阅读public String getString(int index) 的代码,我可以看到如果您的值为空且当前您的输入为空值,它会引发异常。如果您在使用getString 的所有地方都没有发现异常,那么错误将不断出现。改变方法是一个艰难但安全的方法

以上是关于仅在启用 proguard 时 JSONArray 不是字符串异常的主要内容,如果未能解决你的问题,请参考以下文章

androidx.paging.PagedStorage.init 在启用 proguard 时给出错误

启用 ProGuard 时改造 2 不发送数据

使用 Joda Time 时无法生成启用 proguard 的签名 APK

启用 Proguard 时未找到 kotlin.Any

Xamarin Android ProGuard 启用

在 Xamarin Studio 中启用 MultiDex 或 ProGuard 时出错