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);
}