我收到此错误。不是在任何设备上,只是在某些设备上。 这是所有的报告:
java.lang.NullPointerException
at eu.innovaapps.tpark.ro.MainSms$4$1$1.run(MainSms.java:444)
at java.util.Timer$TimerImpl.run(Timer.java:284)
它来自:
buton.setEnabled(false);
Timer buttonTimer = new Timer();
buttonTimer.schedule(new TimerTask() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
buton.setEnabled(true);
}
});
}
}, 5000);
当我按下按钮时,它会被禁用,5秒后它会再次启用。
第444行是getActivity().runOnUiThread(new Runnable() {
。
如果你能帮我解决这个错误,我会很感激。
编辑: 我遇到了同样的问题: Scheduled Task in Fragment returns getActivity as null
如果按钮处于禁用状态,并按下手机的后退按钮,我会收到此错误,该错误会在此部分代码中发送给我。 如果按下后退按钮,有没有办法可以停止计时器?
答案 0 :(得分:0)
您能否告诉您代码中的第444行?
如果第444行是buton.setEnabled(true);
,那么您可以修改代码以添加按钮但是=(按钮)findViewById(在buton.setEnabled(true);
之前的R.id。然后尝试相同的代码。
修改强>
亲爱的维克多,我已经阅读了你的编辑...我曾经得到过这样的例外......为了解决这个问题,我所做的就是我在Activity类中声明了静态变量......
public static sActivity = null;
然后在活动I的onCreate方法中将当前活动分配给它......
sActivity = this;
然后在代码中使用它而不是getActivity()...
因此,例如我的活动名称是myActivity,那么在这种情况下你的代码可以改为......
@Override
public void run() {
getActivity().runOnUiThread(new Runnable()
@Override
public void run() {
if (myActivity.sActivity != null) {
myActivity.sActivity.runOnUiThread(new Runnable()
.
.
.
}
如果您找到其他更好的解决方案,请告诉我......
答案 1 :(得分:-3)
Timer notificationtask = new Timer();
notificationtask.schedule(new TimerTask()
{
@Override
public void run() {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
buton.setEnabled(true);
} catch (Exception e) {
}
}
});
}
}, 1000, 1000);