我正在尝试在一个简单的手电筒应用程序(我正在学习)中实现一个 SeekBar,但无法理解为什么当我将 OnSeekBarChangeListener 设置为我的 SeekBar 时该应用程序一直崩溃。一旦为监听器删除了 onStopTrackingTouch() 中的所有代码,应用程序就可以正常运行。但是,如果监听器的方法中有任何内容,它就会崩溃。我也在应用程序中使用按钮和手势,并且在使用这些方面没有遇到任何问题。
当用户按下菜单按钮时,我会调出一个单独的布局 |亮度选项,显示SeekBar(调整亮度)
这是我实现 SeekBar 的方式:
SeekBar mSeekBar;
...
@Override
public void onCreate(Bundle savedInstanceState){
setContentView(R.layout.main);
...
mSeekBar = (SeekBar)findViewById(R.id.mSeekbar);
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//first set the brightness mode to manual
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
//change the actual setting
WindowManager.LayoutParams lp = getWindow().getAttributes();
float brightness = Float.valueOf(seekBar.getProgress()); //change the brightness here
lp.screenBrightness = brightness;
getWindow().setAttributes(lp); //set the new brightness
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
}
});
感谢您的宝贵时间和建议。
更新:这是我的 Logcat 信息的链接 http://pastie.org/2561098
更新 2:这是我的发布运行 LogCat 信息的链接:http://pastie.org/2561111
已解决:
我在布局出现之前实例化了 mSeekBar 并设置了监听器。 SeekBar 为空,因为我为调整亮度所做的单独布局当前不在 View 中。在设置新布局(用于亮度)后,将实例化和监听器放在我用于选项菜单的 switch 语句中效果很好。
谢谢!
最佳答案
这就是你的答案。在 onCreate 方法的第 77 行,您的程序因 NullPointerException 而崩溃。答案在堆栈跟踪中,虽然这些看起来令人费解,但它们实际上将您指向导致崩溃的确切代码行(大多数情况下)。
at com.polaniec.myflashlight.MyFlashLightActivity.onCreate(MyFlashLightActivity.java:77)
当您深入研究堆栈跟踪时,您想要查找指示您的实际类名和方法名的部分(不是所有的 android.os... 或 java.lang... 方法)。 77 表示它是代码中的第 77 行。无论您引用什么都是空的,也许它没有被实例化?
希望这对您有所帮助!
关于java - Android 开发者 - 使用 SeekBar 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7479510/