一条Log引发的血案

昨天一个业务需求,activityA注册广播,跳转到activityB,在b请求服务器,返回数据以后,广播通知activityA 改变标志位和数据。
很简单很easy得写完了。
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
    LogUtils.e("请求的Url==" + url + "\r\n返回的结果: " + responseInfo.result);
    try {

        JSONObject json = new JSONObject(responseInfo.result);
        //{"flag":10000,"info":"","data":1456111809000}
        String flag = json.optString("flag");
        String info = json.optString("info");
        long data = json.optLong("data");
        if ("10000".equals(flag)) {
            start = Long.toString(data / 1000);
        } else {
            if (!TextUtils.isEmpty(info)) {
                LogUtils.e("info");
            } else {
                LogUtils.e(responseInfo.result);
            }
            //已经过期的,然后再重新购买的 和 第一次购买的 start = 00000

            start = "00000";
        }

    } catch (JSONException e) {
        e.printStackTrace();
        start = null;
        LogUtils.e("json 格式异常" + responseInfo.result);
    }
    Intent intent = new Intent();
    intent.setAction(PARAM.ACTION_USER_EXPERT_ASSOCIATION);
    intent.putExtra(PARAM.EXTRA_ASSOCIATION_TIME, start);
    sendBroadcast(intent);
}
测之,标志位数据没变。
广播里的log没打印,网络请求里的log(使用xutils,不管是success还是failed回调都没打印)也没有打印
开始debug,打了一堆断点。
发现走了请求里面的success回调。但是没有打印。Log语句也执行了,但是没有打印....
ok,没打印就没打印,起码执行了success回调,广播应该发出来了。然而广播onReceive也没有打印,debug时,也没有调用。

此时已经比较dizzy,已经没管明明debug进入了success回调说明请求没问题,而是log有问题这一事实。
因为
1.确实 测试服务器比较烂,有时请求失败, 导致忽略了  即使成功了也没打印log这个小细节
2 单线程调试bug的时候,这种异步的请求 有时候会出现先后顺序不一致,导致我比较相信log 而忽略debug
,第一判断就是 网络的请求的锅。看了半小时xutils的网络请求,debug里面关键方法,发现每一个都走了。又看了一遍Logutils 有没有问题--没问题。非常奇怪,但也管不了了,因为基本确定广播肯定调用了,是log 没打印的问题。
回到onReceive方法没执行,又猜想
1.在广播发送完后 才注册的广播导致没收到? 但是activityA没有销毁,广播应该一直存在。难道我在跳转之前finish了?--没有。
2 或者 activityB 是singletask,因为activityA之前也打开过activityB,导致再次打开activityB,其中间的activityA销毁,从而导致广播销毁?貌似也没有。
将B中 的请求代码全部放回A,Debug半天无果... 下班。
今天早上来,发现是 在成员定义了广播,然而注册的时候
registerReceiver(receiver, filter);
并没有 new 这个receiver 。传了一个空。

@Nullable
public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver,
                                        IntentFilter filter);
由注解来看 是可以传空的,并不会报空指针。。导致广播一直没有消息收到。

这个需求是完成了,可是万恶的log 依然没有打印。昨天因为这个log 没有打印 ,各种猜测,各种失败。
再看看这个log格式,这是之前另外的人所写的Log。

中间的\r\n很有意思
carriage return      \r   回车
line feed                 \n 换行
写代码测试了一下
Log.e("Line feed", "Did you see me \n");
Log.e("Carriage return","Did you see me \r");
System.out.print("Carriage return"+"Did you see me \r");
发现第二个和第三个确实没有打印。。。
带了 \r  Logcat整句 没有打印!!! 一句logcat,浪费 3小时。shit
 logcat 最终都是调用print,应该跟system out print一样。


查了一下,感觉是某些 系统 会有问题。
可能是机型问题? ---不清楚,没用其他机器测试。

反正以后肯定不用这个 转义符了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值