头条穿山甲GroMore广告报错Value pangle of type java.lang.String cannot be converted to JSONObject

接入头条穿山甲广告,
按官网走的,
使用时候大量报错。
Value pangle of type java.lang.String cannot be converted to JSONObject
虽然好像并没有什么严重的直接后果(崩溃),
但是
貌似导致了广告偶尔播不出,
也许报错之后流程中断了。
版本最新的

implementation "com.gromore.cn:gromore-sdk:3.7.0.6"  //groMore sdk
implementation "com.gromore.cn:pangle-adapter:4.8.0.8.2" //穿山甲 adapter
implementation 'com.pangle.cn:ads-sdk-pro:4.8.0.8'

出错的地方大概在:
[官网] https://www.csjplatform.com/union/media/union/download/detail?id=75&docId=629d69f37eb9a6002e62f835&osType=android
加载激励视频广告
官方原文:

        Map<String, String> customData = new HashMap<>();
        customData.put(GMAdConstant.CUSTOM_DATA_KEY_PANGLE, "pangle media_extra");
        customData.put(GMAdConstant.CUSTOM_DATA_KEY_GDT, "gdt custom data");
        // 其他需要透传给adn的数据。

        GMAdSlotRewardVideo adSlotRewardVideo = new GMAdSlotRewardVideo.Builder()
                .setMuted(true)//对所有SDK的激励广告生效,除需要在平台配置的SDK,如穿山甲SDK
                .setVolume(0f)//配合Admob的声音大小设置[0-1]
                .setGMAdSlotGDTOption(GMAdOptionUtil.getGMAdSlotGDTOption().build())
                .setGMAdSlotBaiduOption(GMAdOptionUtil.getGMAdSlotBaiduOption().build())
                .setCustomData(customData)
                .setRewardName("金币") //奖励的名称
                .setRewardAmount(3)  //奖励的数量
                .setUserID("user123")//用户id,必传参数
                .setOrientation(orientation)//必填参数,期望视频的播放方向:GMAdConstant.HORIZONTAL 或 GMAdConstant.VERTICAL
                .build();

这里CUSTOM_DATA_KEY_PANGLE对应的就是报错里面的pangle
原文说对应的value不能转为JSONObject
所以给传入的值改成json类型,或者直接不调用setCustomData
报错消失。。。
大概是某个版本,技术改了代码,但是文档没改。

感觉能播广告的概率都提升了(可能是心理作用)

将 XML 字符串转换为 `JSONObject` 时出现 `org.json.JSONException: Value <?xml of type java.lang.String cannot be converted to JSONObject` 异常,通常是由于尝试使用 `org.json.JSONObject` 直接解析 XML 格式的字符串所导致的。`org.json.JSONObject` 仅支持解析标准的 JSON 格式字符串,而 XML 是一种结构化标记语言,其语法与 JSON 不兼容,因此直接解析会导致类型转换异常 [^3]。 ### 解决方法 #### 1. 使用 XML 解析库将 XML 转换为 JSONObject 可以借助专门用于 XML 解析的库,例如 `org.json.XML`,它提供了将 XML 字符串转换为 `JSONObject` 的功能。使用方式如下: ```java import org.json.JSONObject; import org.json.XML; public class XmlToJsonConverter { public static void main(String[] args) { String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><element>value</element></root>"; try { JSONObject jsonObject = XML.toJSONObject(xmlString); System.out.println(jsonObject.toString(4)); // 格式化输出 } catch (Exception e) { e.printStackTrace(); } } } ``` 此方法通过 `XML.toJSONObject(xmlString)` 将 XML 字符串转换为 `JSONObject`,避免了直接使用 `JSONObject` 构造器导致的类型转换异常 [^2]。 #### 2. 预处理 XML 字符串 如果 XML 字符串中包含非法字符(如 BOM 头 `\ufeff`),会导致解析失败。可以通过预处理 XML 字符串来去除这些字符: ```java xmlString = xmlString.trim().replace("\uFEFF", ""); ``` 然后再使用 `XML.toJSONObject(xmlString)` 进行解析,可以有效避免因格式问题导致的异常 [^2]。 #### 3. 使用第三方 XML 解析库 如果项目对 XML 解析需求较为复杂,建议使用功能更强大的 XML 解析库(如 `Jackson XML` 或 `Simple XML`),它们支持更复杂的 XML 结构,并能将其映射为 Java 对象,从而进一步转换为 `JSONObject`。 ### 总结 解决 `org.json.JSONException: Value <?xml of type java.lang.String cannot be converted to JSONObject` 的核心方法是避免直接使用 `org.json.JSONObject` 解析 XML 字符串。应使用专门的 XML 解析库(如 `org.json.XML`)进行转换,并在必要时对 XML 字符串进行预处理以去除非法字符。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值