Android开发:SeekBar.setOnSeekBarChangeListener空指针异常求助
解决SeekBar空指针异常(Attempt to invoke virtual method ... on a null object reference)
嘿,我来帮你搞定这个烦人的空指针问题!根据你提供的错误信息和代码,这个异常是因为fullBar对象为null时你调用了setOnSeekBarChangeListener方法,咱们一步步排查修复:
核心问题及解决步骤
问题1:
fullBar初始化后仍为null
你在fullBarM()里确实调用了findViewById(R.id.full_Bar),但有几种情况会导致返回null:- 先确认
setContentView(R.layout.activity_main)加载的布局确实包含那个id为full_Bar的SeekBar——比如有没有横屏专用的布局文件,里面漏加了这个SeekBar? - 核对布局和代码里的id是否完全一致(大小写、下划线都不能错),看起来你这里是对的,但可以试试clean然后rebuild项目,有时候R文件缓存会搞出这种乌龙。
- 先确认
问题2:
alarmText完全没初始化
你在类里声明了private TextView alarmText;,但从来没给它调用findViewById赋值,等滑动SeekBar触发onProgressChanged时,调用alarmText.setText()肯定会炸出另一个空指针,这个得提前补上。额外小问题:
percentage变量没定义
代码里fullProgressValue <= percentage * 100这一行的percentage根本没声明,得先定义这个变量(比如是个float类型的百分比值,比如0.5代表50%)。
修改后的完整代码
public class MainActivity extends AppCompatActivity { private Context context; private SeekBar fullBar; private TextView fullBarText; private int fullProgressValue = 0; private TextView alarmText; // 这里先给percentage一个示例值,你可以根据需求修改 private float percentage = 0.5f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fullBarM(); } public void fullBarM() { // 先把所有View初始化好,再调用它们的方法 fullBar = (SeekBar) findViewById(R.id.full_Bar); fullBarText = (TextView) findViewById(R.id.full_Bar_Text); // 别忘了初始化alarmText,对应布局里的id要一致 alarmText = (TextView) findViewById(R.id.alarm_Text); // 加个非空判断更稳妥,避免万一findViewById找不到View if (fullBar != null) { fullBar.setProgress(100); fullBarText.setText("Covered : " + fullBar.getProgress() + " / " + fullBar.getMax()); fullBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { fullProgressValue = progress; fullBarText.setText("Covered : " + progress + " / " + fullBar.getMax()); // 同样给alarmText加个非空判断 if (alarmText != null) { if (fullProgressValue <= percentage * 100) { alarmText.setText("Alarm"); } else { alarmText.setText("Bos"); } } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } } }
布局也要补上alarmText的View
在你的activity_main.xml里添加这个TextView:
<TextView android:id="@+id/alarm_Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/full_Bar_Text" android:layout_centerHorizontal="true" android:layout_marginTop="20dp"/>
内容的提问来源于stack exchange,提问作者ozo
相关产品推荐
相关产品推荐

