Autore Topic: AsyncTask con DatePickerDialog  (Letto 624 volte)

Offline broke31

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy s6
  • Sistema operativo:
    windows
AsyncTask con DatePickerDialog
« il: 04 Maggio 2016, 20:22:34 CEST »
0
Salve ragazzi, ho un problema con la gestione di AsyncTask, ho una classe che estende asyncTask  che viene invocata, e vorrei che questa classe sia capace di mostrare a schermo un DatePickerDialog che alla successiva pressione del tasto ok(del DatePickerDialog) vada ad aggiornare una editText presente nella classe che l'ha invocato, non riesco però a farlo nel modo corretto, vi linko i sorgenti e l'errore
classe che invoca
Codice (Java): [Seleziona]
    public void onDataEditText(View view) {
        taskAsincrono task = new taskAsincrono(data, getApplicationContext());
        task.execute();


    }
classe asincrona:
Codice (Java): [Seleziona]
package it.broke31.lista;

import android.app.DatePickerDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.EditText;

import java.util.Calendar;

public class taskAsincrono  extends AsyncTask<DatePickerDialog,Void,DatePickerDialog>{
    EditText d;
    Context con;
    DatePickerDialog pickerDialog;
    public taskAsincrono(EditText data,Context context) {
        con=context;
        d=data;
    }


    @Override
    protected DatePickerDialog doInBackground(DatePickerDialog... params) {

        final Calendar mcurrentDate = Calendar.getInstance();
        final int mYear = mcurrentDate.get(Calendar.YEAR);
        int mMonth = mcurrentDate.get(Calendar.MONTH);
        int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

        return pickerDialog;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pickerDialog = new DatePickerDialog(con.getApplicationContext(), null, 2016, 04,01);

    }

    @Override
    protected void onPostExecute(DatePickerDialog datePickerDialog) {
        super.onPostExecute(datePickerDialog);
        datePickerDialog.show();
          // qui dovrei anche fare l'aggiornamento della Edittext.. ma ancora non ho ben capito come
    }
}
il problema principale è che quando invoco la classe asincrona l'app va in crash e non viene mostrato nemmeno il dataPickerDialog, ma non riesco a capire il motivo... vi allego anche il logCt
Codice: [Seleziona]
05-04 20:22:13.172 21280-21280/it.broke31.lista E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: it.broke31.lista, PID: 21280
                                                                  android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
                                                                      at android.view.ViewRootImpl.setView(ViewRootImpl.java:853)
                                                                      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337)
                                                                      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
                                                                      at android.app.Dialog.show(Dialog.java:350)
                                                                      at it.broke31.lista.taskAsincrono.onPostExecute(taskAsincrono.java:40)
                                                                      at it.broke31.lista.taskAsincrono.onPostExecute(taskAsincrono.java:10)
                                                                      at android.os.AsyncTask.finish(AsyncTask.java:651)
                                                                      at android.os.AsyncTask.access$500(AsyncTask.java:180)
                                                                      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:158)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:7224)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

grazie mille

Offline iClaude

  • Utente normale
  • ***
  • Post: 284
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:AsyncTask con DatePickerDialog
« Risposta #1 il: 04 Maggio 2016, 23:36:18 CEST »
0
Assolutamente, l'AsyncTask serve per gestire thread, non per visualizzare un DatePickerDialog.
In questo caso non ha nessun senso usarlo.

Offline broke31

  • Nuovo arrivato
  • *
  • Post: 36
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy s6
  • Sistema operativo:
    windows
Re:AsyncTask con DatePickerDialog
« Risposta #2 il: 04 Maggio 2016, 23:45:11 CEST »
0
La  mia intenzione è quella di avere una classe separata che mi aggiorna UI della activity corrente mostrando un datePickerDialog, e visto che questa operazione deve essere fatta in più punti del codice avevo pensato di tenere tutto in una classe per non replicare tutto il codice (creazione del dataPickerDialog inserimento di un metodo che mi setta la data di default del dataPicker l'actionLietener relativo etc) e sapendo che nn posso aggiornare la UI da un thread diverso da quello principale ho deciso di usare una classe asincrona..
P.s. il prof all'epoca ci fece vedere una app che caricava alla pressione di un tasto una foto da una lista di foto non fermando un timer che partiva separatamente( proprio per mostrarci l'uso di asyncTask, credevo che il meccanismo fosse lo stesso)

Offline iClaude

  • Utente normale
  • ***
  • Post: 284
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:AsyncTask con DatePickerDialog
« Risposta #3 il: 05 Maggio 2016, 08:49:53 CEST »
0
L'AsyncTask serve appunto per creare un thread separato, che in questo caso non serve perché devi semplicemente visualizzare una finestra di dialogo.
Io partire da questa guida: utilizzi un Fragment che puoi riutilizzare per le varie Activity:
Pickers | Android Developers