Java Android异常,但没有可见错误
我在我的主课中运行以下代码,只是为了有一个计数器,它可以倒计时到圣诞节的天数、小时、分和秒。从我所看到的,我认为我的代码是正确的(尽管,由于它抛出了一个异常,它可能不是)。有人能看出错误是什么吗Java Android异常,但没有可见错误,java,android,Java,Android,我在我的主课中运行以下代码,只是为了有一个计数器,它可以倒计时到圣诞节的天数、小时、分和秒。从我所看到的,我认为我的代码是正确的(尽管,由于它抛出了一个异常,它可能不是)。有人能看出错误是什么吗 final TextView mTextField = new TextView(this); Calendar xmas = Calendar.getInstance(); Calendar now = Calendar.getInstance(); xmas.set(20
final TextView mTextField = new TextView(this);
Calendar xmas = Calendar.getInstance();
Calendar now = Calendar.getInstance();
xmas.set(2011, 12, 25);
long milliseconds1 = now.getTimeInMillis();
long milliseconds2 = xmas.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
final long diffSeconds = diff / 1000;
final long diffMinutes = diff / (60 * 1000);
final long diffHours = diff / (60 * 60 * 1000);
final long diffDays = diff / (24 * 60 * 60 * 1000);
int delay = 1000; // delay for 1 sec.
int period = 1000; // repeat every sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
mTextField.setText("Days : " + diffDays + " Hours : " + diffHours + " Minutes : " + diffMinutes + " Seconds : " +diffSeconds);
}
}, delay, period);
setContentView(mTextField);
堆栈跟踪如下所示
10-29 17:27:19.258: ERROR/AndroidRuntime(471): FATAL EXCEPTION: Timer-0
10-29 17:27:19.258: ERROR/AndroidRuntime(471): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.ViewRoot.checkThread(ViewRoot.java:2932)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.ViewRoot.requestLayout(ViewRoot.java:629)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.view.View.requestLayout(View.java:8267)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.widget.TextView.checkForRelayout(TextView.java:5514)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.widget.TextView.setText(TextView.java:2724)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.widget.TextView.setText(TextView.java:2592)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at android.widget.TextView.setText(TextView.java:2567)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at com.android.sleeps.SleepstosantaActivity$1.run(SleepstosantaActivity.java:44)
10-29 17:27:19.258: ERROR/AndroidRuntime(471): at java.util.Timer$TimerImpl.run(Timer.java:284)
第44行是mTextField.setText(“天:+diffDays+”小时:+diffHours+”分钟:+diffMinutes+”秒:+diffSeconds”) 无法与线程中的视图交互。计时器基本上是一个线程。您必须在此处将处理程序与计时器一起使用。尝试使用处理程序而不是计时器,从日志中可以看出,问题在于您无法从timerTask更改UI 这里有一些很好的例子: 使用postDelayed可在操作之间提供延迟 你的逻辑有缺陷,应该是这样的:
diff = diff /1000;
final long diffSeconds = diff % 60;
diff = diff / 60;
final long diffMinutes = diff % 60;
...
我还没有测试过,但应该可以使用。您可以从logcat提供异常信息吗?每当您提出异常问题时,您应该说明异常是什么。不要让我们猜测。啊,我很抱歉,仿真器只回答“应用程序myapp(process com.android.myapp)意外停止。请重试。是否存在android仿真器日志异常(或堆栈跟踪?)是的,检查logcat:当你问一个关于Android中异常的问题时,我们通常会想知道logcat中发生了什么。谢谢,正如你所说,我将它改为使用可运行线程,但我得到天:88小时:2113分钟:126780秒:7606800,你能看到我的逻辑有什么错误吗?是的,你的逻辑n确实需要一些工作!首先你需要使用模运算符。然后你需要在进行时减去每一个片段。我将为你输入一些代码。。。