Java Android空指针异常?
您好当我尝试根据Java Android空指针异常?,java,android,android-preferences,seekbar,Java,Android,Android Preferences,Seekbar,您好当我尝试根据onResume中的振铃器音量当前水平设置seekbar的当前进度时,我得到以下信息: 12-31 22:02:12.559: E/AndroidRuntime(266): java.lang.RuntimeException: Unable to resume activity {com.camelCaseD.nsettings/com.camelCaseD.nsettings.Toggles}: java.lang.NullPointerException 12-31 22:
onResume
中的振铃器音量当前水平设置seekbar
的当前进度时,我得到以下信息:
12-31 22:02:12.559: E/AndroidRuntime(266): java.lang.RuntimeException: Unable to resume activity {com.camelCaseD.nsettings/com.camelCaseD.nsettings.Toggles}: java.lang.NullPointerException
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.os.Handler.dispatchMessage(Handler.java:99)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.os.Looper.loop(Looper.java:123)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-31 22:02:12.559: E/AndroidRuntime(266): at java.lang.reflect.Method.invokeNative(Native Method)
12-31 22:02:12.559: E/AndroidRuntime(266): at java.lang.reflect.Method.invoke(Method.java:507)
12-31 22:02:12.559: E/AndroidRuntime(266): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-31 22:02:12.559: E/AndroidRuntime(266): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-31 22:02:12.559: E/AndroidRuntime(266): at dalvik.system.NativeStart.main(Native Method)
12-31 22:02:12.559: E/AndroidRuntime(266): Caused by: java.lang.NullPointerException
12-31 22:02:12.559: E/AndroidRuntime(266): at com.camelCaseD.nsettings.SeekBarPreference.setProgressC(SeekBarPreference.java:215)
12-31 22:02:12.559: E/AndroidRuntime(266): at com.camelCaseD.nsettings.Toggles.onResume(Toggles.java:112)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.Activity.performResume(Activity.java:3832)
12-31 22:02:12.559: E/AndroidRuntime(266): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110)
12-31 22:02:12.559: E/AndroidRuntime(266): ... 12 more
视图类扩展了首选项
,视图的布局如下所示:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.syssvc.volume"
android:stretchColumns="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="20px"
android:paddingRight="10px"
>
<TableRow android:paddingTop="10px"
android:paddingBottom="2px" >
<TextView android:id="@android:id/title" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="22dp"
android:typeface="sans"
android:textStyle="normal"
android:textColor="#ffffff" />
</TableRow>
<TableRow android:paddingTop="2px"
android:paddingBottom="2px" >
<TextView android:id="@android:id/summary"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow
android:paddingBottom="20px">
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</TableRow>
</TableLayout>
任何帮助都将不胜感激。我如何找到错误的来源
在
setProgressC
中,当我在onBindView
中将该变量的值和setProgressC
本身输出到LogCat
setProgressC中哪一行是215?在setProgressC()
中哪一行代码引发了异常?剩下的SeekBarPreference
是什么样子的?(Alex指的是跟踪中唯一实际有用的一行:位于com.camelCaseD.nsettings.SeekBarPreference.setProgressC(SeekBarPreference.java:215)
我猜这是第215行?bar.setProgress(mgr.getStreamVolume(AudioManager.STREAM\RING))如果是这样,你应该尝试Project->Clean
来重建项目。通常情况下,Eclipse会产生一个与XML布局相关的错误,清理项目就足够解决它了。是的,不要猜测!捕获异常,然后四处搜索。虽然通常可以很容易地看到NPE,但是日志记录(等等:-)不是查看“异常时的状态”的替代。找到视图了吗?(例如,该视图可能返回null。如果这不是原因,当它不应该是null时,什么是null?)
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.syssvc.volume"
android:stretchColumns="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="20px"
android:paddingRight="10px"
>
<TableRow android:paddingTop="10px"
android:paddingBottom="2px" >
<TextView android:id="@android:id/title" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="22dp"
android:typeface="sans"
android:textStyle="normal"
android:textColor="#ffffff" />
</TableRow>
<TableRow android:paddingTop="2px"
android:paddingBottom="2px" >
<TextView android:id="@android:id/summary"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow
android:paddingBottom="20px">
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</TableRow>
</TableLayout>
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceCategory mAudCat = (PreferenceCategory) findPreference("audCat");
SeekBarPreference mRingerVol = new SeekBarPreference(this, null, AudioManager.STREAM_RING);
mRingerVol.setKey("ringerVol");
mAudCat.addPreference(mRingerVol);
}
@Override
public void onResume() {
super.onResume();
SeekBarPreference mRingerVol = (SeekBarPreference) findPreference("ringerVol");
mRingerVol.setProgressC(AudioManager.STREAM_RING);
}