Comment extraire les valeurs de NumberPickerDialog?

Im en utilisant une classe pour gérer NumberPicker et je veux définir le texte d'un bouton avec les valeurs de la classe. Im en utilisant six numérospicker dans un NumberPickerDialog.

C'est la classe:

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;
}   

}

Le problème est que lorsque j'essaie de définir le buttom du texte (bt.setText ()), cela me donne une erreur.

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)

Qu'est-ce que je rate?

0

1 Réponses

Puisque je ne sais pas quelle ligne dans votre code est 146 , je vais deviner que c'est ici votre problème.

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

btHodometro is null because it cannot find it in your view, you either dont have it in your view or you are not giving it the right view to use.

Si ce bouton se trouve dans votre disposition R.layout.sixnumber , vous devez l'initialiser dans votre constructeur comme vous le faites pour les autres éléments

0
ajouté
Est-ce juste à cette ligne l'erreur. Ce bouton est dans mon activité, quand je clique dessus, cette boîte de dialogue apparaît et appelle la R.layout.sixnumber en tant que Layout. Pourquoi est-ce que ça crashe quand j'appelle le bouton? C'est dans mon activité.
ajouté l'auteur Roland, source
Comment je fais ça?
ajouté l'auteur Roland, source
son écrasement parce que votre activité n'est plus en vue si une boîte de dialogue est en place, vous devez créer un rappel à l'activité lorsque la boîte de dialogue est fermée pour définir le bouton
ajouté l'auteur tyczj, source
Pour un, vous devriez utiliser des fragments, puis vous pouvez le faire comme ça developer.android .com/guide/composants/& hellip;
ajouté l'auteur tyczj, source