Я не могу инициализировать компонент в асинхронной фоновой функции - PullRequest
0 голосов
/ 04 апреля 2011

Как бы я назвал эту функцию в 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");
}
}
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

У вас есть выбор: использовать обработчики или позвонить напрямую. В обоих случаях вы должны передать ссылку на конструктор AsyncTask. onPostExecute () вызывается в потоке пользовательского интерфейса, поэтому вы можете вызывать метод непосредственно по ссылке вашей деятельности.

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 голосов
/ 04 апреля 2011

Я бы использовал обработчик.Вот пример: http://developer.android.com/resources/articles/timed-ui-updates.html

...