在while循环中使用post处理程序

时间:2017-06-06 09:33:28

标签: java android

我试图在while(true)循环中使用handler.postdelayed所以每隔5秒它会使用一个按钮发送一个特定的值 但当我按下按钮时它只是挂起而没有任何响应它不会崩溃也不发送 我如何使用在循环内延迟的帖子?

 btnsend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                while(true) {
                    final Handler handler = new Handler();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {


                                DatabaseReference childRoot = rootRoomName.push();
                                Map<String, Object> map = new HashMap<String, Object>();
                                map.put("Name", username);
                                map.put("message", Response1);
                                childRoot.updateChildren(map);



                        }
                    }, 5000);
                }
            }
        });

2 个答案:

答案 0 :(得分:0)

这是错误的。您正在使用while(true)循环终止应用程序。相反,你应该在最后的run()方法中调用postDelayed,这样它每次执行后都会自行调度。像这样:

handler = new Handler();

runnable = new Runnable() {
    @Override
    public void run() {
        handler.postDelayed(this, 5000);
    }
}

handler.post(runnable);

答案 1 :(得分:0)

您使用了无限循环,它不会正常终止。我不认为你在这里需要,只需根据需要配置处理程序。

btnsend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    DatabaseReference childRoot = rootRoomName.push();
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put("Name", username);
                    map.put("message", Response1);
                    childRoot.updateChildren(map);
                }
            }, 5000);
        }
    });