Android NumberPicker NullPointer почему?


Я пытаюсь реализовать numberPicker для выбора минутных значений.

Но я получаю исключение NullPointer в этой строке:

minutePicker = (NumberPicker) findViewById(R.id.minuten_picker);

Следующий Код:

public class MainActivity extends Activity {


NumberPicker minutePicker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Auswahl Minuten zum starten / Stoppen aller
    minutePicker = new NumberPicker(MainActivity.this);
    minutePicker = (NumberPicker) findViewById(R.id.minuten_picker);
    minutePicker.setMaxValue(30);


    minutePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            abschaltzeit = minutePicker.getValue();
        }
    });

    minutePicker.setValue(0);
    minutePicker.setWrapSelectorWheel(false);

}
}

XML:

<NumberPicker
    android:id="@+id/minuten_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="6"
    android:layout_column="0"
    android:paddingLeft="20dp" />

Журнал:

09-25 11:00:09.749  10687-10687/de.carsten.awesome.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: de.carsten.awesome.app, PID: 10687
    java.lang.RuntimeException: Unable to start activity ComponentInfo{de.carsten.awesome.app/de.carsten.awesome.app.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at de.carsten.awesome.app.MainActivity.onCreate(MainActivity.java:83)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
1 3

1 ответ:

minutePicker = new NumberPicker(MainActivity.this);
minutePicker = (NumberPicker) findViewById(R.id.minuten_picker);

Вы создаете NumberPicker программно, а затем перезаписываете ссылку тем, что возвращает findViewById(). Он возвращает null, если ваш макет activity_main не содержит minuten_picker.

  • Выберите только другое: либо создайте его программатически, либо найдите его из иерархии представлений, которую вы раздули.

  • Если вы выбрали программный способ new NumberPicker(), Не забудьте добавить его в некоторый макет в иерархии представлений активности, например с помощью setContentView()

  • Если вы выберете таким образом, убедитесь, что у вас есть представление в файле xml-макета.

Я предполагаю, что NPE, который вы видите, на самом деле находится в следующей строке, где вы пытаетесь вызвать метод на minutePicker, и это null.