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

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

call.enqueue(new Callback() {            @Override            public void onResponse(@NonNull Call call, @NonNull Response 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 call, Throwable t) {                callBack.onFailure();            }        });

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

更多相关文章

  1. Android获取应用程序的信息
  2. Android应用程序全屏显示的方法
  3. Android实现再按一次(返回键)实现退出(应用程序)
  4. android 程序检测是否安装
  5. [zz]一个JNI下c和java程序范例
  6. Android 对程序异常崩溃的捕捉
  7. android程序执行adb shell命令
  8. vs xamarin android 监听返回键退出程序
  9. [android]为程序创建快捷方式

随机推荐

  1. [better practice系列]Android处理好acti
  2. 重构博客园Android(安卓)App
  3. Android(安卓)File Transfer – 在 Mac
  4. Android(安卓)AppTheme 系統預設樣式andr
  5. Android与linux的区别与联系
  6. Android(安卓)Provision (Setup Wizard)
  7. Android内核开发:源码的版本与分支详解
  8. 从零开始--系统深入学习android(实践-让我
  9. 深入解读Linux与Android的相互关系
  10. Android通过WebView与JS交互的全面方式