Timer上的NullPointerException

时间:2014-01-27 14:45:18

标签: android nullpointerexception

我收到此错误。不是在任何设备上,只是在某些设备上。 这是所有的报告:

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

如果按钮处于禁用状态,并按下手机的后退按钮,我会收到此错误,该错误会在此部分代码中发送给我。 如果按下后退按钮,有没有办法可以停止计时器?

2 个答案:

答案 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);