Request the time in an AlertDialog

0

What I want is to have an EditText that when pressed will display a dialog in which you choose the hour and the minutes. The dialog box comes up, but when I click on the accept option I get the classic "Unfortunately the app stopped" ...

This is what I have done so far ...

public class Activity_llamadas extends Activity {

Button boton;
EditText editText;
TextView textView;
int h=0;
int m=0;


@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_llamadas);

    textView=(TextView)findViewById(R.id.textViewHora);
    final TimePicker timePicker= (TimePicker)findViewById(R.id.timePickerInicio);
     boton=(Button)findViewById(R.id.buttonActHora);
     boton.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
          int hora= timePicker.getCurrentHour();
          int min=timePicker.getCurrentMinute();textView.setText(String.valueOf(hora)+": "+String.valueOf(min)); //aqui me funciona bien

         }
     });
    editText=(EditText)findViewById(R.id.getHora);
    editText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showTime();
        }
    });

} public void showTime(){
   AlertDialog.Builder builder= new AlertDialog.Builder(this);
   LayoutInflater inflater = getLayoutInflater(); 
   builder.setView(inflater.inflate(R.layout.dialog_set_time,null))
           .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int i) { // EL PROBLEMA ESTA AQUI 
                  final TimePicker timePicker= (TimePicker)findViewById(R.id.timePicker);
                   TextView textView=(TextView)findViewById(R.id.textViewHora);
                        h=timePicker.getCurrentHour();
                        m=timePicker.getCurrentMinute();
                   textView.setText(String.valueOf(h)+": "+String.valueOf(m));  //textView donde pongo la hora

               }
           });
           builder.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { //esto tambien funciona bien
               @Override
               public void onClick(DialogInterface dialog, int which) {
                   Toast.makeText(getApplicationContext(),"Por favor, seleccione una hora",Toast.LENGTH_SHORT).show();
               }
           });
   AlertDialog alert=builder.create();
   alert.show(); }}'

This is what the logCat shows me with the error filter:

02-18 17:59:29.750 17266-17266/com.example.andry.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.example.andry.myapplication, PID: 17266
                                                                             java.lang.NullPointerException
                                                                                 at com.example.andry.myapplication.Activity_llamadas$3.onClick(Activity_llamadas.java:70)
                                                                                 at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                                 at android.os.Looper.loop(Looper.java:193)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5299)
                                                                                 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:822)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
                                                                                 at dalvik.system.NativeStart.main(Native Method)

Line 70 is this: h = timePicker.getCurrentHour ();

THANK YOU IN ADVANCE

    
asked by Andry_UCI 19.02.2018 в 00:14
source

3 answers

0

You are missing the method to select hour / minute, which is this:

 @Override
 public void onClick(DialogInterface dialog, int i) { // EL PROBLEMA ESTA AQUI
     final TimePicker timePicker= (TimePicker)findViewById(R.id.timePicker);
     timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
         @Override
         public void onTimeChanged(TimePicker timePicker, int hourOfDay, int minute) {
         TextView textView = (TextView) findViewById(R.id.textViewHora);
         //h = timePicker.getCurrentHour();
         //m = timePicker.getCurrentMinute();
         textView.setText(String.valueOf(hourOfDay) + ": " + String.valueOf(minute));  //textView donde pongo la hora
        }
   }); 
    
answered by 19.02.2018 в 06:22
0

The problem is that it tries to get hour and minute values from a TimePicker instance that does not exist:

 h=timePicker.getCurrentHour();
 m=timePicker.getCurrentMinute();

In this case you must ensure that the TimePicker with id timePicker is in the layout dialog_set_time.xml that loads your AlertDialog .

If you assure the above then now check that you get the TimePicker of the Dialog:

final TimePicker timePicker= (TimePicker) dialog.findViewById(R.id.timePicker);

     TextView textView=(TextView)dialog.findViewById(R.id.textViewHora);

      h=timePicker.getCurrentHour();
      m=timePicker.getCurrentMinute();
    
answered by 19.02.2018 в 21:13
0

I already solved the problem, what I did was to work with the TimePickerDialog class. The method to get the time and show in a TextView I stay as follows:

private void mostrarHora(final TextView t) {
    final TimePickerDialog timePickerDialog = new TimePickerDialog(this,
            new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay,int minute) {
                 int h= view.getCurrentHour();
                 int  m = view.getCurrentMinute();
                   setTxHora(h,m,t);
                }
            }, h, m, false);
    timePickerDialog.setTitle("Selecciona la hora");
    timePickerDialog.show();
}

The setxHora () method is in charge of receiving a TextView the hour and the minutes and writing them in the TextView passed by parameter also

    
answered by 23.02.2018 в 03:26