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