Как получить значения из NumberPickerDialog?

Я использую класс для обработки NumberPicker, и я хочу установить текст кнопки со значениями из класса. Я использую шесть числовых сборщиков в NumberPickerDialog.

Это класс:

public class NumberPickerDialog extends AlertDialog implements OnClickListener {
private OnNumberSetListener mListener;
private NumberPicker mNumberPicker1;
private NumberPicker mNumberPicker2;
private NumberPicker mNumberPicker3;
private NumberPicker mNumberPicker4;
private NumberPicker mNumberPicker5;
private NumberPicker mNumberPicker6;

int n1; 
int n2; 
int n3; 
int n4;
int n5;
int n6;

private int mInitialValue;

public NumberPickerDialog(Context context, int theme, int initialValue) {
    super(context, theme);
    mInitialValue = initialValue;

    setButton(BUTTON_POSITIVE, "Confirmar", this);        
    setTitle("Valor Atual do Hodômetro (em Km)");

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.sixnumber, null);
    setView(view);

    mNumberPicker1 = (NumberPicker) view.findViewById(R.id.num_picker1);
    mNumberPicker2 = (NumberPicker) view.findViewById(R.id.num_picker2);
    mNumberPicker3 = (NumberPicker) view.findViewById(R.id.num_picker3);
    mNumberPicker4 = (NumberPicker) view.findViewById(R.id.num_picker4);
    mNumberPicker5 = (NumberPicker) view.findViewById(R.id.num_picker5);
    mNumberPicker6 = (NumberPicker) view.findViewById(R.id.num_picker6);

}

/**
 * Retrieve the number picker used in the dialog
 */    
public NumberPicker getmNumberPicker1() {
    return mNumberPicker1;
}

public NumberPicker getmNumberPicker2() {
    return mNumberPicker2;
}

public NumberPicker getmNumberPicker3() {
    return mNumberPicker3;
}

public NumberPicker getmNumberPicker4() {
    return mNumberPicker4;
}

public NumberPicker getmNumberPicker5() {
    return mNumberPicker5;
}

public NumberPicker getmNumberPicker6() {
    return mNumberPicker6;
}

/**
 * Set the range allowed for the number picker
 * @param start the minimum allowed value
 * @param end the maximum allowed value     * 
 * and setting the value directly.
 */

public void setRange1(int start, int end) {
    mNumberPicker1.setRange(start, end);

}

public void setRange2(int start, int end) {
    mNumberPicker2.setRange(start, end);

}

public void setRange3(int start, int end) {
    mNumberPicker3.setRange(start, end);

}

public void setRange4(int start, int end) {
    mNumberPicker4.setRange(start, end);

}

public void setRange5(int start, int end) {
    mNumberPicker5.setRange(start, end);

}    

public void setRange6(int start, int end) {
    mNumberPicker6.setRange(start, end);

}

/**
 * Set the wrap option for the number picker
 * @param wrap true if values need to wrap
 * @deprecated Instead this can be set by retrieving the numberpicker
 * and setting the value directly.
 */

/**
 * Set the range for the number picker and the values to display
 * @param start the minimum allowed value
 * @param end the maximum allowed value
 * @param displayedValues values to display in the numberpicker instead of
 * the integer values of the range
 * @deprecated Instead this can be set by retrieving the numberpicker
 * and setting the value directly.
 */

public void setOnNumberSetListener(OnNumberSetListener listener) {
    mListener = listener;
}

@Override
public void onClick(DialogInterface dialog, int which) {       
    if(which == BUTTON_POSITIVE){
         n1 = mNumberPicker1.getCurrent();
         n2 = mNumberPicker2.getCurrent();
         n3 = mNumberPicker3.getCurrent();
         n4 = mNumberPicker4.getCurrent();
         n5 = mNumberPicker5.getCurrent();
         n6 = mNumberPicker6.getCurrent(); 

         Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento);
         btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6);
    }  

}

public interface OnNumberSetListener {
    public void onNumberSet(int selectedNumber);    

}   


public int getN1() {
    return n1;
}

public int getN2() {
    return n2;
}

public int getN3() {
    return n3;
}

public int getN4() {
    return n4;
}

public int getN5() {
    return n5;
}

public int getN6() {
    return n6;
}   

}

Проблема в том, что когда я пытаюсь установить текстовую кнопку (bt.setText()), это выдает ошибку.

11-22 15:36:44.489: E/AndroidRuntime(6733): FATAL EXCEPTION: main
11-22 15:36:44.489: E/AndroidRuntime(6733): java.lang.NullPointerException
11-22 15:36:44.489: E/AndroidRuntime(6733):     at br.com.going2.carrorama.helper.NumberPickerDialog.onClick(NumberPickerDialog.java:146)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:165)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at android.os.Looper.loop(Looper.java:130)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at android.app.ActivityThread.main(ActivityThread.java:3687)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at java.lang.reflect.Method.invokeNative(Native Method)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at java.lang.reflect.Method.invoke(Method.java:507)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
11-22 15:36:44.489: E/AndroidRuntime(6733):     at dalvik.system.NativeStart.main(Native Method)

Что мне не хватает?

1 ответ

Так как я не знаю, какая строка в вашем коде 146 Я собираюсь догадаться, что это ваша проблема.

Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento);
     btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6);

btHodometro является нулевым, потому что он не может найти его в вашем представлении, у вас либо его нет, либо вы не предоставляете ему правильное представление.

если эта кнопка находится в вашем R.layout.sixnumber макет, то вы должны инициализировать его в своем конструкторе, как и другие элементы

Другие вопросы по тегам