gpt4 book ai didi

使用 Android Studio 调试时 Java 代码执行不正确

转载 作者:行者123 更新时间:2023-12-01 10:03:08 24 4
gpt4 key购买 nike

我的 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的常量,并相应地扩展正确的 View 。我的常量 POST_VIEW_TYPE 等于 1:

enter image description here

到目前为止一切顺利。我将 viewType 作为 1 传递给我的处理程序,但代码以某种方式评估 else 分支,即使 if 的计算结果为 true (显然):

enter image description here

这怎么可能?

更新:我已经清理了项目并重建了,但没有任何改变。我在 if 语句上设置了一个断点。下面是我单步执行调试器时演示的 GIF:

enter image description here

最佳答案

感谢 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 自己的 Android IDE 无法单步执行(甚至不显示警告,告知调试可能由于多个返​​回路径而错误地单步执行)Dalvik 生成的代码。我希望 ART 能够解决这个问题。

关于使用 Android Studio 调试时 Java 代码执行不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com