2011-04-04 2 views
0

Comment appeler cette fonction dans asynctask?Je ne peux pas initialiser le composant dans la fonction d'arrière-plan asynctask

void somefunc() 
{ 
tr1 = (TableRow) new TableRow(this); 
//error 
txt1=new TextView(this); 
txt9.setText(strinarr[0]); 

tr1.addView(txt1); 
tl.addView(tr1,new TableLayout.LayoutParams(layoutParams)); 
} 


class SaveAdDetail extends AsyncTask<Void, String, Void> 
{ 
@Override 
public void onPreExecute() 
{ 
super.onPreExecute(); 
Progdialog = ProgressDialog.show(demotable.this, "", "Please Wait...", true); 
Progdialog.show(); 
} 
@Override 
public Void doInBackground(Void... unused) 
{ 
try 
{somefunc();} 
catch (Exception e) 
{strdata="Error";} 
return null; 
} 
@Override 
public void onPostExecute(Void unused) 
{ 
Progdialog.dismiss(); 
if(strdata.equals("Error")) 
{Toast(strdata);} 
else 
{ 
Toast("asdasdasd"); 
} 
} 
} 

Répondre

1

Vous avez le choix: utilisez des gestionnaires ou appelez directement. Dans les deux cas, vous devez passer une référence au constructeur de AsyncTask. onPostExecute() est appelé sur le thread de l'interface utilisateur, vous pouvez donc appeler la méthode directement sur la référence de votre activité.

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
      case Constants.TASK_FINISHED: 
       somefunc(); 
       break;     
     } 
    } 
}; 

SaveAdDetail task = new SaveAdDetail(handler); 
task.execute(); 

// dans votre SaveAdDetail:

@Override 
public void onPostExecute(Void unused) { 
    Progdialog.dismiss(); 
    handler.obtainMessage(Constants.TASK_FINISHED).sendToTarget(); 
} 
+0

i étudié à propos de gestionnaire un peu ... mais si vous pouviez me donner un petit exemple pour l'utilisation côté gestionnaire et barre de progression côte .. – Sourabh

+0

a mis à jour la réponse. –

Questions connexes