我有两个课程:Main - Activity
和Second - 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()
。
答案 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才能使用它。希望它有所帮助。