0

我有两个班级: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()

4

3 回答 3

2

看起来您从未设置main为实例,所以它是null.

你需要做类似的事情

Main main = new Main();

实际上,由于您是main从内部类引用,因此您还需要将其设为mainfinal,以便内部类可以引用它:

final Main main = new Main();
于 2013-10-12T23:52:43.767 回答
0

您的 asynctask 类应该是 Main 的私有内部类。 这样,您将能够在 Second 中从 Main 访问您想要的所有内容

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

于 2013-10-13T10:09:09.797 回答
0

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

于 2013-10-13T10:19:03.513 回答