onCreate Null Pointer Exception

时间:2014-06-07 19:13:45

标签: android xml

我不明白为什么这段代码没有运行:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_matchpage);

    SeekBar sb1 = (SeekBar) findViewById(R.id.seek1);
            sb1.setEnabled(false);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }
}

sb1将为null。 为什么呢?

2 个答案:

答案 0 :(得分:2)

我将尝试从我的经验回答一件事,即错误来自SeekBar sb1 = (SeekBar) findViewById(R.id.seek1);,但是我注意到android从底部编译代码,因此可能发生原因在于上面或其他地方所以我会建议以这种方式替换代码: -

  1. protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_matchpage);
    }
    
  2. 然后如果执行,则只需在SeekBar sb1 = (SeekBar) findViewById(R.id.seek1);下面添加setContentview

  3. 它有点大,但既然你没有提供xml,我们无法弄清楚它的包装问题或其他什么,所以我试图去真正原始和基础......

    希望它有所帮助。

答案 1 :(得分:1)

您可能正在使用Fragment。您的代码中应该有一个名为PlaceHolderFragment的类,它具有onCreateView方法。

在该项目中,您有两个xml布局,一个名为activity_matchpage,另一个名称为fragment_main。你需要修改后者并保持第一个像这样:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="youor.packaque.MainActivity"
tools:ignore="MergeRootFrame" />

fragment_main中,您声明了自己的观点。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.tformacion.finale.MainActivity$PlaceholderFragment" >

        <!-- Your Views here -->

</RelativeLayout>

然后,在您的Java代码中,PlaceHolderFragment内部onCreateView

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        seekBar = (seekBar) rootView.findViewById(R.id.yourSeekBarId);

    }

如果你想摆脱片段,你只需在activity_matchpage中创建XML,不要添加片段,所以,删除它:

if (savedInstanceState == null) {
    getSupportFragmentManager().beginTransaction()
            .add(R.id.container, new PlaceholderFragment()).commit();
}