通过这种方法,我每秒都在更新TextView
。
private void UpdatingTime(final String endTime, final long diffInDays) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(ONE_SECOND);
mHandler.post(new Runnable() {
@Override
public void run() {
// Updating time every second
long diffInHours = Methodes.diffInHours(endTime, diffInDays);
long diffInMinutes = Methodes.diffInMinutes(endTime, diffInDays, diffInHours);
long diffInSeconds = Methodes.diffInSeconds(endTime, diffInDays, diffInHours, diffInMinutes);
tvTime2.setText(addZeroInFront(diffInHours)
+ ":" + addZeroInFront(diffInMinutes)
+ ":" + addZeroInFront(diffInSeconds));
}
private String addZeroInFront(long diffInHours) {
String s = "" + diffInHours;
if (s.length() == 1) {
String temp = s;
s = "0" + temp;
}
return s;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
}
这种方法很完美。但我得到了这个警告:
'while'语句无法在不抛出异常的情况下完成。
报告for,while或do语句只能 通过抛出异常退出。虽然这些陈述可能是正确的, 它们通常是编码错误的症状。
我讨厌警告,我想解决它。我该如何解决这个警告,或者这个无限循环有更好的解决方案......?
答案 0 :(得分:17)
这个警告是误报;你应该忽略它。
通常,无限循环是某处错误的标志;在你的代码中,无限循环正是你想要的。
答案 1 :(得分:17)
您可能正在使用Android Studio或IntelliJ。
如果是这样,你可以在包含无限循环的方法上面添加这个来抑制警告:
@SuppressWarnings("InfiniteLoopStatement")
或者添加这个"魔法"评论声明:
//noinspection InfiniteLoopStatement
这将告诉IDE这没关系。
更一般地说,当您收到误报警告时,请执行Alt+Enter
并执行以下屏幕截图中显示的内容(仅当您的课程充满误报时选择课程,以获得相同的警告)
答案 2 :(得分:2)
如果你想要每秒触发一些东西,你可以遵循这种方法,你可以确定它会在你离开后删除回调。在您完成活动之前,它会每秒调用一次。如果需要,您甚至可以在生命周期中删除之前的回调,例如onPause()或onStop()。
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
handler.post(updateTime);
}
@Override
protected void onDestroy()
{
super.onDestroy();
handler.removeCallbacks(updateTime);
}
private final Runnable updateTime = new Runnable()
{
public void run()
{
try
{
// Updating time every second
long diffInHours = Methodes.diffInHours(endTime, diffInDays);
long diffInMinutes = Methodes.diffInMinutes(endTime, diffInDays, diffInHours);
long diffInSeconds = Methodes.diffInSeconds(endTime, diffInDays, diffInHours, diffInMinutes);
tvTime2.setText(addZeroInFront(diffInHours)
+ ":" + addZeroInFront(diffInMinutes)
+ ":" + addZeroInFront(diffInSeconds));
handler.postDelayed(this, 1000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
private String addZeroInFront(long diffInHours)
{
String s = "" + diffInHours;
if (s.length() == 1)
{
String temp = s;
s = "0" + temp;
}
return s;
}
};
答案 3 :(得分:2)
您可能使用IntelliJ IDEA收到此警告,对吗?
正如其他人已经提到的那样,通常可以忽略此警告。
如果您要将其停用,请打开“设置”,然后转到编辑器>检查并搜索Infinite loop statement
。只需取消选中该框,即可完成。
通常,您只需将文字光标放在要禁用的警告上,然后按 Alt + Enter ,然后点击检查信息字段,然后点击禁用检查。