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

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

内容简介:最近发现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-4-1 / 45.00元

本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识。本书门槛不高,不需要读者精通很多高深的数学知识,只需要读者具备基本的四则运算、乘方等数学基础知识和日常生活中的基本逻辑判断能力即可。本书拒绝枯燥乏味的讲解,而是代之以轻松活泼的风格。书中列举了大量读者都很熟悉,而且非常有趣的数学实例,并结合程序设计的思维和算法加以剖析,可以训练读者的数学思维能力和程序设计能力,进而拓宽读者的视野,......一起来看看 《程序员的数学思维修炼(趣味解读)》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具