2012-05-01 4 views
0

C'est ma classe AsyncTaskaprès l'exécution classe AsyncTask, retour prochaine activité nullpointexception

private class UpdatingNews extends AsyncTask<Void, Void, String> { 

    @Override 
    protected String doInBackground(Void... params) { 
     webservice.UpdateAllNews(); 
     webservice.updateallCatNews(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 
} 

je l'appelle par

UpdatingNewsupdate = new UpdatingNews(); 
     update.execute(); 

Il fait Excecute. Ensuite, je veux vérifier le statut de cette tâche a finir ou non quand je clique sur le bouton, donc je vérifie comme ça.

if (update.getStatus().toString() 
          .equals(AsyncTask.Status.FINISHED.toString())) { 
         toast = Toast.makeText(Main_FormNewUser.this, 
           "Thanks for fill in our survey form!", 
           Toast.LENGTH_SHORT); 
         toast.setGravity(Gravity.CENTER_VERTICAL 
           | Gravity.CENTER_HORIZONTAL, 0, 0); 
         toast.show(); 
         name = nametext.getText().toString(); 
         email = emailtext.getText().toString(); 
         webservice.InsertSurvey(name, email, ages, genders, 
           jobs, salaries, interesting); 
         webservice.insertFormSubmit(1); 

         startActivity(new Intent(Main_FormNewUser.this, 
           Main_AllLatestNews.class)); 
         finish(); 
        } 

Après que je clique dessus, il va commencer Main_AllLatestNews.class mais avec NullPointerException.

Je n'essaie pas d'utiliser AsyncTask et ne me renvoie aucune erreur, je ne sais pas pourquoi j'appelle AsyncTask cela me donnera une erreur?

+0

Sur quelle ligne se trouve le NPE? –

+0

pouvez-vous poster le logcat? – MikeIsrael

Répondre

0

Comprendre les bases de AsyncTask Vérifiez ce blog. Painless Threading ou AsyncTask

Vous ne l'avez pas accepter le retour de doInBackground() dans onPostExecute (String résultat)

doInBackground() retourne le résultat à onPostExecute. Vous devez donc mettre à jour les valeurs ou l'interface utilisateur que vous voulez dans onPostExecute uniquement.

+0

comment accepter le retour de doinbackground()? –

+0

@som_rout Bien qu'il soit vrai que vous ne pouvez pas effectuer d'actions d'interface utilisateur dans doInBackground(), vous pouvez modifier les ensembles de données dans doInBackground. Il semble que c'est ce qu'il fait ici – MikeIsrael

+0

@mikeisrael vous avez raison. peut être cette méthode webservice.UpdateAllNews(); webservice.updateallCatNews(); pourrait ne pas mettre à jour les valeurs. – Som

0

comment sur l'utilisation onPostExecute comme cette façon

ajouter de la valeur booléenne pour déterminer si AsyncTask est fin ou non

@Override 
protected void onPostExecute(String result) { 
    check = true; 
} 


//if (update.getStatus().toString().equals(AsyncTask.Status.FINISHED.toString())) { 
if(check){ 
        toast = Toast.makeText(Main_FormNewUser.this, 
          "Thanks for fill in our survey form!", 
          Toast.LENGTH_SHORT); 
        toast.setGravity(Gravity.CENTER_VERTICAL 
          | Gravity.CENTER_HORIZONTAL, 0, 0); 
        toast.show(); 
        name = nametext.getText().toString(); 
        email = emailtext.getText().toString(); 
        webservice.InsertSurvey(name, email, ages, genders, 
          jobs, salaries, interesting); 
        webservice.insertFormSubmit(1); 

        startActivity(new Intent(Main_FormNewUser.this, 
          Main_AllLatestNews.class)); 
        finish(); 
       } 
Questions connexes