为什么我的代码导致空指针异常?

时间:2017-07-03 19:12:12

标签: java android gridview

我意识到之前已经提出了类似的问题,但我是初学程序员正在开发我的第一个应用程序,如果有人能帮助我理解使用我的特定代码,我将非常感激。

今天是第一次出现。几个星期前我发布了我的游戏,有几十个人玩过它没有任何问题,所以我试图弄清楚为什么会发生这种情况,因为相同的代码可能至少成功运行了50次。

会议开始后10秒发生:

异常java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.View android.view.View.findViewById(int)'

所涉及的两行代码出现在CountDownTimer的onTick方法中,该方法在用户单击按钮时启动。他们是:

View currentView = gridView.getChildAt(randomPosition);
ImageView image = (ImageView) currentView.findViewById(R.id.button);

GridView是在onCreate方法的开头附近实现的:

  adapter = new ButtonAdapter(this, clickButtons);
  gridView = (GridView) findViewById(R.id.gridview);
  gridView.setAdapter(adapter);

我猜测gridView在某种程度上是null,但由于在onCreate中实现它的代码在CountDownTimer启动之前运行,我不确定这是怎么回事。

编辑:现在我开始认为问题在适配器中。

public class ButtonAdapter extends ArrayAdapter<ClickButton> {


public ButtonAdapter(@NonNull Context context, @NonNull ClickButton[] objects) {
    super(context, 0, objects);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    // Check if an existing view is being reused, otherwise inflate the view
    View gridItemView = convertView;
    if (gridItemView == null) {
        gridItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.button, parent, false);
    }

    ClickButton currentButton = getItem(position);

    ImageView button = (ImageView) gridItemView.findViewById(R.id.button);

    button.setImageResource(currentButton.mSource);
    button.setAlpha(currentButton.mOpacity);

    return gridItemView;
}
}

Android Studio要我替换

button.setImageResource(currentButton.mSource);
button.setAlpha(currentButton.mOpacity);

button.setImageResource(currentButton != null ? currentButton.mSource : 
0);
button.setAlpha(currentButton != null ? currentButton.mOpacity : 
0);

有人可以解释这些变化的作用吗?您是否认为没有这些更改是导致崩溃的原因,您是否知道为什么崩溃只发生一次而不是每次都使用应用程序?

0 个答案:

没有答案