我的应用程序出现问题,我无法弄清问题是什么。在ICS上该应用程序可以运行,但在任何2.X上它都有问题。我相信它与循环有关,但我仍然有点困惑。
开发人员控制台向我发出错误报告:
Exception class > java.lang.StackOverflowError
Source method > Matrix.setScale()
这是导致问题的代码......
private void shiftLoop7()
{
if (d7 != doy && d7 < 366)
{
d7 = d7 + 8;
shiftLoop7();
}
else if(d7 == doy)
{
if (hour >= 0 && hour < 8)
{
shift.setText("C");
shift.setTextAppearance(getApplicationContext(), R.style.CShift);
shiftImage.setImageResource(R.drawable.c);
timeTill.setText("till 7:45 AM");
dayshift.setText("A Shift");
day1.setBackgroundResource(R.color.A);
day2.setBackgroundResource(R.color.A);
day3.setBackgroundResource(R.color.A);
day4.setBackgroundResource(R.color.A);
nightshift.setText("C Shift");
night1.setBackgroundResource(R.color.C);
night2.setBackgroundResource(R.color.C);
night3.setBackgroundResource(R.color.C);
night4.setBackgroundResource(R.color.C);
}
else if (hour >= 8 && hour < 17)
{
shift.setText("A");
shift.setTextAppearance(getApplicationContext(), R.style.AShift);
shiftImage.setImageResource(R.drawable.a);
timeTill.setText("till 4:45 PM");
dayshift.setText("A Shift");
day1.setBackgroundResource(R.color.A);
day2.setBackgroundResource(R.color.A);
day3.setBackgroundResource(R.color.A);
day4.setBackgroundResource(R.color.A);
nightshift.setText("C Shift");
night1.setBackgroundResource(R.color.C);
night2.setBackgroundResource(R.color.C);
night3.setBackgroundResource(R.color.C);
night4.setBackgroundResource(R.color.C);
}
else
{
shift.setText("C");
shift.setTextAppearance(getApplicationContext(), R.style.CShift);
shiftImage.setImageResource(R.drawable.c);
timeTill.setText("till 7:45 AM");
dayshift.setText("A Shift");
day1.setBackgroundResource(R.color.A);
day2.setBackgroundResource(R.color.A);
day3.setBackgroundResource(R.color.A);
day4.setBackgroundResource(R.color.A);
nightshift.setText("C Shift");
night1.setBackgroundResource(R.color.C);
night2.setBackgroundResource(R.color.C);
night3.setBackgroundResource(R.color.C);
night4.setBackgroundResource(R.color.C);
}
}
else
{
shiftLoop8();
}
}
答案 0 :(得分:1)
堆栈溢出的一个常见原因是大量的递归调用 - 由于导致无限递归的错误,或者只是构造为具有非常深的递归的代码。
在您的情况下,堆栈溢出可能是由于您的代码有可能进行相当大的递归调用。你可以重构递归调用只是while循环吗?例如,而不是:
if (d7 != doy && d7 < 366)
{
d7 = d7 + 8;
shiftLoop7();
}
你能做到以下几点:
while (d7 != doy && d7 < 366)
{
d7 = d7 + 8;
}