Android 如何从NumberPickerDialog中获取值?

Android 如何从NumberPickerDialog中获取值?,android,android-layout,android-dialog,Android,Android Layout,Android Dialog,我使用一个类来处理NumberPicker,我想用类中的值设置按钮的文本。我在NumberPickerDialog中使用六个数字选择器 这是一节课: public class NumberPickerDialog extends AlertDialog implements OnClickListener { private OnNumberSetListener mListener; private NumberPicker mNumberPicker1; private NumberPick

我使用一个类来处理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)

我遗漏了什么?

因为我不知道代码中的哪一行是
146
,我猜这就是你的问题

Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento);
     btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6);
b hodometro
为空,因为它在您的视图中找不到它,或者您的视图中没有它,或者您没有给它正确的视图来使用它


如果此按钮位于
R.layout.sixnumber
布局中,则应在构造函数中初始化它,就像初始化其他元素一样。错误就在这一行。此按钮在我的活动中,当我单击它时,将显示此对话框并将R.layout.sixnumber称为layout。为什么我按按钮时它会崩溃?它在我的活动中。它崩溃是因为你的活动不再在视图中。如果对话框打开,你需要在对话框关闭时创建一个对活动的回调来设置按钮,你应该使用片段,然后你可以这样做