Android——你可能不知道的Debug细节

Android——你可能不知道的Debug细节

近期在使用Android Studio对程序进行Debug时,发现了一个之前自己一直忽视或者说不了解的一个细节,特此记录下来分享给大家。
开发中,我对以下一段代码进行了调试:

call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
                try {
                    if (response.isSuccessful()) {
                        String result = response.body().string();
                        Gson gson = new Gson();
                        VehicleEntity vehicleEntity = gson.fromJson(result, VehicleEntity.class);
                        if (vehicleEntity == null) {
                            callBack.onNoData();
                        } else {
                            callBack.onSuccess(vehicleEntity);
                        }
                    } else {
                        callBack.onFailure();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    callBack.onFailure();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                callBack.onFailure();
            }
        });

如上述代码,是关于一个网络请求的过程,然后我在debugger视图中把result添加到watcher:

结果debug过程中result一直为一个空的字符串,而我如果不debug直接运行程序,则一切正常,当时我以为这是什么奇怪的bug,百思不得其解。
后来多方询问终于找出了发生此现象的原因。大家可以看到我在watcher里面输出的其实是一个语句,reslut=response.body.string()。而watcher里的语句,会在你的debug触发第一个断点时,就会尝试执行,也就是说,在我这个程序遇到第一个断点时,“reslut=response.body.string()”这个语句就已经尝试执行了。而巧就巧在okhttp的response.body.string()方法只能有效调用一次,所以当debug真正执行到这一句的时候,get到的string就已经是空值了,并不是什么bug。
所以大家在调试程序的时候,打印变量的方式以及断点的位置都要有所注意和讲究,不要在这上面白白耽误了自己的时间~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值