设置onSeekBarChangeListener会导致null对象异常

时间:2015-12-15 22:56:52

标签: java android seekbar

我尝试使用搜索栏的值更新textview,但我在设置OnSeekBarChangeListener时遇到问题。我没有任何编译错误,但每次我尝试运行应用程序时,都会得到一个空指针异常。

错误说:

尝试调用虚方法' void android.widget.SeekBar.setOnSeekBarChangeListener(android.widget.SeekBar $ OnSeekBarChangeListener)'在空对象引用上

我不能为我的生活弄清楚为什么,尽管在StackOverflow中徘徊。每个类似的问题,或者如何设置OnSeekBarChangeListener的教程似乎都表明我完全按照自己所做的去做。救命啊!

    public class MainActivity extends AppCompatActivity {
public TextView time;
public SeekBar bar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    time = (TextView) findViewById(R.id.time);
    bar = (SeekBar) findViewById(R.id.bar);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    bar.setOnSeekBarChangeListener(listener);

}

private SeekBar.OnSeekBarChangeListener listener = new OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        time.setText((String.valueOf(progress/100) + ":" + String.valueOf(progress % 100)));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {


    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {

    }
};}

3 个答案:

答案 0 :(得分:8)

我会尝试设置这些行

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

首先在onCreate方法中,然后尝试使用

查找seekBar视图
bar = (SeekBar) findViewById(R.id.bar);

请告诉我它是否能解决您的问题!

findViewById()方法将尝试查找具有指定ID的视图。但要做到这一点,它必须知道哪个布局文件用于活动,以便它知道在哪里搜索。这就是你用setContentView指出的,这就是它必须先来的原因。

答案 1 :(得分:2)

将您的onCreate替换为:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    time = (TextView) findViewById(R.id.time);
    bar = (SeekBar) findViewById(R.id.bar);
    bar.setOnSeekBarChangeListener(listener);
}

在使用setContentView()之前,您应该致电findViewById

答案 2 :(得分:0)

当您调用错误的活动或调用正确的活动并调用另一个没有所需组件的错误活动时,也会发生此错误,例如

git commit

所以一个解决方案是写类似的行     的setContentView(R.layout.correct_activity_with_your_component); 之前您的组件验证如果没有另一个命令 类似于

setContentView(R.layout.correct_activity_with_your_component);
some code....    setContentView(R.layout.wrong_activity_without_your_component_bar_activity_main);
bar = (SeekBar) findViewById(R.id.bar);

在使用以下代码调用组件之前

setContentView(R.layout.correct_activity_with_your_component);