2011-04-04 23 views
0

如何在asynctask中調用此函數?我無法初始化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"); 
} 
} 
} 

回答

1

你有一個選擇:使用處理程序或直接調用。在這兩種情況下,您都應該傳遞對AsyncTask構造函數的引用。 onPostExecute()在UI線程上被調用,所以你可以直接調用你的活動引用的方法。

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(); 

//你SaveAdDetail:

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

我研究有關處理程序有點......但如果你能給我要如何通過側使用的處理程序和進度條邊的一個小例子.. – Sourabh 2011-04-04 14:09:52

+0

更新了答案。 – 2011-04-04 14:16:22