Как получить значения из 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
макет, то вы должны инициализировать его в своем конструкторе, как и другие элементы