【问题标题】:java NullPointerException Android Handlerjava NullPointerException Android 处理程序
【发布时间】:2014-10-04 04:32:06
【问题描述】:
    public class MainActivity extends ActionBarActivity {   
    Handler myHandler;
    Runnable myRunnable;
    TextView tv;
    int no;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myHandler.post(myRunnable);
    }

    public void initialize(){
        no = 10;
        tv = (TextView) findViewById(R.id.textView1);

        myRunnable = new Runnable() {

            @Override
            public void run() {
                tv.setText(Integer.toString(no));
                no--;
                if(no != 0)
                myHandler.postDelayed(myRunnable, 1000);
            }
        };
    }
}

我尝试强制方向为纵向以运行此代码,但再次失败。

每当我尝试使用处理程序在每一秒后基本上更改视图文本时,我都会收到此错误。

我是一名大学生,刚接触 Android 开发,如果有任何错误,请多多包涵。

提前谢谢你。

日志如下。

    10-04 04:22:35.750: E/AndroidRuntime(2123):FATAL EXCEPTION: main

    10-04 04:22:35.750: E/AndroidRuntime(2123):java.lang.RuntimeException: Unable to start activity ComponentInfo{we.funnycorps.handlerpractise/we.funnycorps.handlerpractise.MainActivity}: java.lang.NullPointerException

    10-04 04:22:35.750: E/AndroidRuntime(2123):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)

    10-04 04:22:35.750: E/AndroidRuntime(2123):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)

【问题讨论】:

  • 你在哪里调用了initialize 方法。你应该在 onCreate 中调用它
  • 你没有初始化 myHandler 也没有在任何地方调用 initialize() 方法,所以在调用 myHandler.post(myRunnable) 时两者都是 NULL;

标签: java android nullpointerexception android-handler


【解决方案1】:

你还没有在oncreate中使用initialize()函数,下面的代码使用,你会得到预期的结果。

public class Dummycls extends Activity {

Handler myHandler;
Runnable myRunnable;
TextView tv;
int no;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize();
//myHandler.post(myRunnable);
}

public void initialize(){
no = 10;
tv = (TextView) findViewById(R.id.pinchTitleText);

myHandler=new Handler();
myRunnable = new Runnable(){
    public void run() {
        tv.setText(Integer.toString(no));
        no--;
        if(no != 0)
        myHandler.postDelayed(myRunnable, 1000);

        //handler.postDelayed(r, 1000);


    }
}; 
myHandler.post(myRunnable);


   }
 }

【讨论】:

    【解决方案2】:

    myHandler初始化为

    Handler myHandler = new Handler();
    

    即替换

    Handler myHandler;
    

     Handler myHandler = new Handler();
    

    并在myHandler.post(myRunnable);之前调用initialize()方法

    initialize();
    myHandler.post(myRunnable);
    

    【讨论】:

      【解决方案3】:

      myHandler 没有被初始化,并且由于在你的 onCreate() 中没有调用 initialize() 方法,所以 myRunnable 在你尝试发布之前也没有被初始化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 2014-03-28
        • 2012-11-06
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多