我无法在 asynctask 后台函数中初始化组件

发布于 2024-10-29 22:32:27 字数 766 浏览 0 评论 0原文

我如何在 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");
}
}
}

How would I call this function in 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");
}
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

起风了 2024-11-05 22:32:27

您可以选择:使用处理程序或直接调用。在这两种情况下,您都应该传递对 AsyncTask 构造函数的引用。 onPostExecute() 在 UI 线程上调用,因此您可以直接在 Activity 的引用上调用该方法。

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

You have a choice : use handlers or call directly. In both cases you should pass a reference to the constructor of AsyncTask. onPostExecute() is called on the UI thread, so you can call the method directly on the reference of your activity.

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

// in your SaveAdDetail:

@Override
public void onPostExecute(Void unused) {
   Progdialog.dismiss();
   handler.obtainMessage(Constants.TASK_FINISHED).sendToTarget();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文