Apiclude中Talkingdata模块异常日志不能收集问题

栏目: IOS · Android · 发布时间: 6年前

内容简介:最近发现talkingdata的异常日志收集的页面中没有任何异常信息。期初还认为是前端配置有问题,就去检查了一遍遍配置信息和官方的一模一样。既然前段没问题那问题很可能是在前端,自己在android原生代码中故意抛出一个异常,还是不能收集到任何异常信息。这次意识到问题可能出在Talkingdata模块的java代码中。下面记录一下问题的原因。下面我们先看AS中打印的部分日志信息这里面有一个NullPointerException但这个异常包的很诡异,我一开始被这段异常误导了很久,期初还以为是腾讯的一个os文件

最近发现talkingdata的异常日志收集的页面中没有任何异常信息。期初还认为是前端配置有问题,就去检查了一遍遍配置信息和官方的一模一样。既然前段没问题那问题很可能是在前端,自己在android原生代码中故意抛出一个异常,还是不能收集到任何异常信息。这次意识到问题可能出在Talkingdata模块的 java 代码中。下面记录一下问题的原因。

原因

下面我们先看AS中打印的部分日志信息

01-16 18:09:09.068 30338-30338/? W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'void com.tendcloud.tenddata.ao.c(boolean)' on a null object reference
        at com.tendcloud.tenddata.ac.a(td:286)
        at com.tendcloud.tenddata.TCAgent.setReportUncaughtExceptions(td:175)
        at com.talkingdata.apicloud.TalkingDataDelegate.onApplicationCreate(TalkingDataDelegate.java:28)
        at com.uzmap.pkg.uzcore.t.a(Unknown Source:41)
        at com.uzmap.pkg.uzcore.t.a(Unknown Source:24)
        at com.uzmap.pkg.openapi.APICloud.<init>(Unknown Source:37)
        at com.uzmap.pkg.openapi.APICloud.initialize(Unknown Source:6)
        at xxx.xxxxx.xxx.xxxxxxx.MyApp.onCreate(MyApp.java:26)
复制代码

这里面有一个NullPointerException但这个异常包的很诡异,我一开始被这段异常误导了很久,期初还以为是腾讯的一个os文件报出的警告没太在意。下面xxx.xxxxx.xxx.xxxxxxx.MyApp.onCreate(MyApp.java:26)指向的位置是Application继承类的onCreate()方法即APICloud框架的初始化方法

//初始化APICloud,SDK中所有的API均需要初始化后方可调用执行
APICloud apiCloud = APICloud.initialize(appContext);
复制代码

这个警告报的也是让人不明白。我自己也是查看官方文档和superwebview的文档也是没有任何问题啊。虽然上面有TCAgent.setReportUncaughtExceptions(td:175)信息。因为很早之前我遇到这个警告那个时候还没有使用到Talkingdata的异常收集功能所以当时没有在意。看到警告下意识的就去有查看蓝色表示的日志。(所以不认真看日志真的很容易掉坑啊),因此当今天在看到这个日志后一下子及想到了这个日志是Talkingdata源码中代码有关,于是就按照日志信息查看,果然被我找到了问题的原因。 TalkingData_module.jar是官方出的用于Js端和原生的Talkingdata交互的包,问题就出在该包中TalkingDataDelegate.java类中的onApplicationCreate()方法中。

public void onApplicationCreate(Context context, AppInfo info) {
    super.onApplicationCreate(context, info);
    //获取widget文件夹的config.xml文件中配置的信息
    boolean logEnable = Boolean.valueOf(info.getFeatureValue("TalkingData", "logEnable"));
    String channel = info.getFeatureValue("TalkingData", "channel");
    String exceptionReportEnabled = info.getFeatureValue("TalkingData", "exceptionReportEnabled");
    TCAgent.LOG_ON = logEnable;
    //开启异常收集
    TCAgent.setReportUncaughtExceptions(true);
    //关闭异常
    if (exceptionReportEnabled != null && !Boolean.valueOf(exceptionReportEnabled)) {
        TCAgent.setReportUncaughtExceptions(false);
    }
    TCAgent.init(context, "apicloud_" + info.appId, channel == null ? "" : channel);
}
复制代码

从上面的代码中可以看出问题,Talkingdata的异常收集要早于初始化执行。即初始化还没完成,就已经开启了异常收集,所以才不能收集到异常信息。解决的办法很简单。就是先初始化完成,再开启异常收集。

//初始化
TCAgent.init(context, "apicloud_" + info.appId, channel == null ? "" : channel);
//开启异常收集
TCAgent.setReportUncaughtExceptions(true);
//关闭异常
if (exceptionReportEnabled != null && !Boolean.valueOf(exceptionReportEnabled)) {
    TCAgent.setReportUncaughtExceptions(false);
}
复制代码

以上所述就是小编给大家介绍的《Apiclude中Talkingdata模块异常日志不能收集问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

支付革命

支付革命

马梅、朱晓明、周金黄、季家友、陈宇 / 中信出版社 / 2014-2-1 / 49.00元

本书是中国首部深入探讨第三方支付的著作。 本书以电子交易方式、电子货币及电子认证技术演变的“三重奏”将决定电子支付中介的发展为主线,分析了中国第三方支付从“小支付”走向“大金融”的历史逻辑、技术逻辑和商业逻辑,揭示了第三方支付特别是创新型第三方支付机构发展对提升中国经济运行效率的作用,分析了第三方支付的未来发展趋向,并提出了相应的政策建议。 本书旨在以小见大,立足于揭示互联网与移动互联......一起来看看 《支付革命》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具