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模块异常日志不能收集问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

支付战争

支付战争

埃里克•杰克逊 / 徐彬、王晓、清华大学五道口金融学院未央研究 审译 / 中信出版社 / 2015-5-19 / 49.00

这是一个野心勃勃的创业计划,在线支付鼻祖PayPal试图创造一个“统治世界”的金融操作系统,并在全球成功推广一款颠覆式的互联网产品。 《支付战争》的作者是“PayPal黑帮”成员之一,他真实还原了这个伟大产品是如何诞生的,以及在后来的发展壮大之路上,如何应对融资紧张、突破增长瓶颈,在竞争者凶猛围剿与平台商霸王条款的夹击下,逆境求生,改变业务模式,最终完成IPO,并成功出售给竞争对手eBay的......一起来看看 《支付战争》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器