我按照其他问题的说明操作,但我的应用程序崩溃了。因此,我的一项活动有大约2,000行代码。我想创建另一个只保存代码的类,然后特定的活动从其他代码保存类运行该方法,仅用于组织。
所以这是我尝试的例子,但它不起作用。 ActivityA:
public class ActivityA extends Activity {
ActivityB test= new ActivityB();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
testing();
}
public void testing() {
test.codeTest();
}
然后这是助手类。 ActivityB:
public class ActivityB extends ActivityA{
public void codeTest() {
//2,000 lines of code
}
应用程序崩溃了。我究竟做错了什么? :/我也尝试过:
public class ActivityA extends Activity {
ActivityB test= new ActivityB();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test.codeTest();
}
我觉得自己甚至是一个白痴甚至在这个>上寻求帮助。<
我得到的错误是:
java.lang.StackOverflowError.
错误的行是:
public class ActivityA extends Activity {
和
public class ActivityB extends ActivityA{
和最后一行错误代码是
ActivityB test= new ActivityB();
我做错了什么? :/
答案 0 :(得分:2)
你问的是一个有效的问题。我不认为我能解答你的代码崩溃的原因。但请考虑一下:
A将包含B,B中将包含A,其中包含B,其中包含B,其中包含B. ..
这可能是堆栈溢出的来源。如果您单步执行代码,程序在什么时候崩溃?
另外,如果您使用静态函数创建静态类,则可以做得很好。
public static class myUtility {
public static void someFunction() { . . .}
}
编辑: 在盯着您的代码几分钟后,我可能已经理解了您要做的事情。让我试一试:
说你想要"脏"代码在B中。将B声明为抽象:
public abstract class ActivityB extends Activity {
. . .
}
然后为你的A班,
public class ActivityA extends Activity implements ActivityB {
}
这就是你想要的"实现"?
答案 1 :(得分:0)
问题似乎与您在活动A中实例化活动B这一事实有关,但您的目的是让活动B成为活动的延伸甲
public class ActivityA extends Activity {
ActivityB test= new ActivityB(); // i.e., this line is suspicious Activity B extends A which instantiates B...it's a bit circular...
答案 2 :(得分:0)
添加其他答案,您正在创建一个2合1活动* infinty。只需声明并初始化您的帮助" class作为活动中的新对象:
MyHelper helper = new MyHelper(context);
// Now, you can access your helper class' functions
String string = helper.helperMethod();
我希望这有助于您理解,快乐编码!