我正在尝试为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;
}
}`
答案 0 :(得分:0)
因为您没有初始化handler
对象。所以你得到了NullPointerException
。
你需要做一些这样的事情:
Handler handler = new Handler();
在使用此对象之前,代码中的某处。
答案 1 :(得分:0)
您的处理程序必须使用
进行实例化 handler = new Handler();
使用前。
答案 2 :(得分:0)
您的格式很难阅读,但如果尚未初始化runnable或处理程序,则会获得NPE。由于您提供了一个新的可运行对象,这意味着您的处理程序尚未初始化。
我认为你是在onClickListener中创建你的处理程序。尝试在onCreate或onCreateView的顶部初始化它以获得清晰度。
古德勒克