2017-06-06 64 views
0

我试图在while(true)循环内使用handler.postdelayed,所以每5秒钟会使用按钮 发送一个特定值,但是当我按下按钮时它只是挂起而没有任何响应不会崩溃既不发送 我怎样才能使用延迟内循环?在while循环中使用后处理程序

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); 
       } 
      } 
     }); 
+0

改为使用定期报警管理器。此代码不会工作 –

+0

您可以使用新的后台线程进行定期更新。如果你想我会提供源代码。 – Krish

回答

0

这是错误的。你用一段时间(真正)循环杀死应用程序。相反,你应该从run()方法的末尾调用postDelayed,以便它在执行后每次调度自己。类似这样的:

handler = new Handler(); 

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

handler.post(runnable); 
+0

与我合作,谢谢 –

0

你已经使用了一个无限的while循环,它不会正常终止。我不认为你需要在这里,只需要配置处理程序。

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); 
     } 
    });