Java 使用 Android Studio 调试时代码执行不正确
Java code executing incorrectly when debugging with Android Studio
我的 Android 应用程序中有此代码:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == POST_VIEW_TYPE){
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
return new PostViewHolder(view);
}else{
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
return new UserViewHolder(view);
}
}
代码基本上得到一个名为 viewType
的常量,并相应地膨胀正确的视图。我的常量 POST_VIEW_TYPE
等于 1
:
到目前为止一切顺利。我将 viewType
作为 1
传递给我的处理程序,但代码以某种方式评估 else
分支,即使 if
中的(非常简单的)表达式评估为 true
(显然):
这怎么可能?
更新: 我已经清理并重建了项目,但没有任何改变。我在 if 语句上设置了一个断点。这是我逐步调试调试器时演示的 GIF:
我已经解决了这个问题,感谢 Mike M. 在 Android Studio debugger highlights the wrong lines 上指出了类似的问题。
显然,正确的代码 正在 执行,但由于我的代码中其他地方存在完全不相关的错误,它掩盖了问题,并且由于调试器行为不正确,我我只是认为发生了与此问题相关的事情。我已经修复了另一个错误,并将 onCreateViewHolder
中的代码更改为:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
if(viewType == POST_VIEW_TYPE){
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
holder = new PostViewHolder(view);
}else{
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
holder = new UserViewHolder(view);
}
return holder;
}
它现在可以正常工作(和调试)。有趣的是 Google 自己的 IDE for Android 无法单步执行(甚至不显示警告,告诉调试可能由于多个 return 路径)Dalvik 生成的代码。我希望 ART 解决了这个问题。
我的 Android 应用程序中有此代码:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == POST_VIEW_TYPE){
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
return new PostViewHolder(view);
}else{
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
return new UserViewHolder(view);
}
}
代码基本上得到一个名为 viewType
的常量,并相应地膨胀正确的视图。我的常量 POST_VIEW_TYPE
等于 1
:
到目前为止一切顺利。我将 viewType
作为 1
传递给我的处理程序,但代码以某种方式评估 else
分支,即使 if
中的(非常简单的)表达式评估为 true
(显然):
这怎么可能?
更新: 我已经清理并重建了项目,但没有任何改变。我在 if 语句上设置了一个断点。这是我逐步调试调试器时演示的 GIF:
我已经解决了这个问题,感谢 Mike M. 在 Android Studio debugger highlights the wrong lines 上指出了类似的问题。
显然,正确的代码 正在 执行,但由于我的代码中其他地方存在完全不相关的错误,它掩盖了问题,并且由于调试器行为不正确,我我只是认为发生了与此问题相关的事情。我已经修复了另一个错误,并将 onCreateViewHolder
中的代码更改为:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
if(viewType == POST_VIEW_TYPE){
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
holder = new PostViewHolder(view);
}else{
View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
holder = new UserViewHolder(view);
}
return holder;
}
它现在可以正常工作(和调试)。有趣的是 Google 自己的 IDE for Android 无法单步执行(甚至不显示警告,告诉调试可能由于多个 return 路径)Dalvik 生成的代码。我希望 ART 解决了这个问题。