2015-05-02 5 views
16

Sto seguendo il tutorial di Google Android su Udacity ma nel codice specificato, sto ottenendo il seguente warning:chiamata non controllato a 'execute (Params ...)' come membro di tipo raw 'android.os.AsyncTask'

chiamata non controllato a 'execute (Params ...)' come membro di tipo raw 'android.os.AsyncTask'

su questo codice:

DoSomethingTask myTask = new DoSomethingTask(); 
myTask.execute(); // Warning here 

DoSomethingTask:

public class DoSomethingTask extends AsyncTask { 

    protected Object doInBackground(Object[] params) { 
     ... 
    } 
} 

Qualcuno può spiegare questo avviso e come risolverlo? Sembra che dovrebbe funzionare secondo le istruzioni ...

+0

Con il termine "errore" si intende "warning "? – immibis

+0

@immibis sì :) – doovers

+1

Penso che sia causato dai parametri per l'attività, provare ad estendere i parametri AsyncTask e rimuovere Object [] nell'attività. Oppure prova ad estendere AsyncTask e aggiungi un oggetto in esecuzione (someObject) – Surely

risposta

23

L'avviso è causato dai parametri per l'attività. Prova ad utilizzare:

extends AsyncTask<Void, Void, Void>{ 
    protected Object doInBackground() { 
    } 
} 

o l'uso:

extends AsyncTask<Object, Void, Void>{ 
    protected Object doInBackground(Object[] params) { 
    } 
} 
myTask.execute(anyObject); 

Spiegazione:

This documento spiega il significato dei tre tipi di AsyncTask.

  1. Parametri, il tipo di parametri inviati al compito al momento dell'esecuzione.

  2. Progress, il tipo di unità di avanzamento pubblicati durante lo sfondo di calcolo.

  3. Risultato, il tipo del risultato del calcolo dello sfondo.
+0

Il secondo approccio funziona per me. Grazie :) – anhtuannd

+0

Che cosa significa questo avviso ?! @zp_x –

+0

@ChintanShah ciao, ho aggiunto una spiegazione. Fondamentalmente per usarlo, basta assicurarsi che i tipi siano abbinati correttamente. – Surely

0

cambiamento

AsyncTask asyncTask = new AsyncTask<Object, Void, String>() { 

     @Override 
     protected String doInBackground(Object... params) { 
      return ""; 
     } 
    }; 

    asyncTask.execute(); 

a

AsyncTask<Object, Void, String> asyncTask = new AsyncTask<Object, Void, String>() { 

     @Override 
     protected String doInBackground(Object... params) { 
      return ""; 
     } 
    }; 

    asyncTask.execute(); 

riferimento AsyncTask bisogno lo stesso di AsyncTask classe, e IDE non di avvertimento.