为什么这段代码会抛出NullPointerException?

时间:2013-12-15 00:01:03

标签: android timer handler

我正在尝试为Android编写计时器,但我遇到了处理程序的问题。这一行:

handler.post(new Runnable(){

...正在触发NullPointerException。为什么呢?

public class HomeFragment extends Fragment  {

    private int stunde,minute,sekunde;
    private TextView textfield;
    private Button buttonStart,buttonStop;
    private Handler handler;
    private boolean Running = true;
    private Runnable runnable;
    private Thread thread;



    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);

        buttonStart =(Button) rootView.findViewById(R.id.button1);
        buttonStop = (Button) rootView.findViewById(R.id.button2);
        buttonStop.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                thread.stop();

            }

        });
        textfield = (TextView) rootView.findViewById(R.id.startZeit);





        buttonStart.setOnClickListener(new OnClickListener(){


            @Override
            public void onClick(View v) {
                Running = true;
                runnable = new Runnable(){

                    @Override
                    public void run() {

                        while(Running){
                            try{

                                Thread.sleep(1000);
                            }
                            catch(InterruptedException e){
                                e.printStackTrace();
                            }
                            handler.post(new Runnable(){


                                @Override
                                public void run(){

                                    sekunde+=1;


                                    if(sekunde == 60){
                                        minute +=1;
                                        sekunde = 0;
                                    }if(minute == 60){
                                        stunde +=1;
                                    }

                                    textfield.setText(String.format("%02d",stunde)+" : "+String.format("%02d", minute)+" : "+String.format("%02d",sekunde));



                                }


                            });
                        }

                    }


                };
                thread = new Thread(runnable);
            thread.start();
            handler = new Handler();



            }

        });


        return rootView;
    }


}`

3 个答案:

答案 0 :(得分:0)

因为您没有初始化handler对象。所以你得到了NullPointerException

你需要做一些这样的事情:

Handler handler = new Handler();

在使用此对象之前,代码中的某处。

答案 1 :(得分:0)

您的处理程序必须使用

进行实例化
 handler = new Handler();
使用前

答案 2 :(得分:0)

您的格式很难阅读,但如果尚未初始化runnable或处理程序,则会获得NPE。由于您提供了一个新的可运行对象,这意味着您的处理程序尚未初始化。

我认为你是在onClickListener中创建你的处理程序。尝试在onCreate或onCreateView的顶部初始化它以获得清晰度。

古德勒克