从asynctask调用活动方法

时间:2013-10-12 23:49:45

标签: java android

我有两个课程:Main - ActivitySecond - AsyncTask。我想点击按钮点击mymethod

我试过了。

public class Second extends AsyncTask<Void, Void, Void> {

    Main main;

    @Override
    protected void onProgressUpdate(Void... values) {
    // TODO Auto-generated method stub
    super.onProgressUpdate(values);

    main = new Main(); //Wrong because is an Activity

    Button con = (Button)activity.findViewById(R.id.con);

    con.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
             // TODO Auto-generated method stub
            main.mymethod(v);
        }
     });
   }
}

但它会抛出java.lang.IllegalStateException: System services not available to Activities before onCreate()

3 个答案:

答案 0 :(得分:2)

看起来您从未将main设置为实例,因此它是null

您需要执行类似

的操作
Main main = new Main();

事实上,因为你从内部类引用main,所以你还需要使main成为最终的,所以内部类可以引用它:

final Main main = new Main();

答案 1 :(得分:0)

您的asynctask类应该是Main的私有内部类。 通过这种方式,您可以在第二个

中访问Main中所需的所有内容

你将主Activity作为参数传递给Second的解决方案是一个坏主意,因为活动可能会被泄露,因为第二个仍然会引用Main,而系统会想要销毁main。

答案 2 :(得分:0)

如果你真的需要调用你的mymethod(View v)然后把它写在另一个单独的类中,更好的是作为静态方法,它将帮助你使用该方法而不需要使用类的实例。你可能不能像你想要的那样使用其他Activity的方法,因为它是一个Activity,因此必须先运行onCreate才能使用它。希望它有所帮助。