【发布时间】:2014-11-28 06:42:49
【问题描述】:
大家好,我遇到了一个问题,即我尝试每 30 秒运行一次的方法导致我的切换按钮崩溃。我的目标是根据按钮单击将数据发送到数据库,并在切换按钮打开时每三十秒通过一个方法继续发送该数据。当我单击按钮时,我收到了不幸的错误并且应用程序崩溃了。
为了节省这篇文章的长度,这个只发送一次数据的按钮可以正常工作:
uploadOnce.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
try {
SendCode(socket);
}catch(Exception e){
String stackTrace = Log.getStackTraceString(e);
sendEmail(stackTrace);
}
}
});
请注意,上面的按钮点击使用了 SendCode 方法,并且可以正常工作。
我遇到的错误是使用带有计时器的相同方法,如下所示:
这是 onClick 的切换按钮:
toggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
if (toggle.isChecked()) {
makeToast("On");
sendForever();
}
}catch (Exception e){
String stackTrace = Log.getStackTraceString(e);
sendEmail(stackTrace);
}
}
});
如果我取消 sendForever() 方法,切换按钮会按预期正常工作。
这是切换按钮中的 sendForever 方法:
public void sendForever(){
if(toggle.isChecked()) {
while (toggle.isChecked()) {
try {
new Handler().postDelayed(new Runnable() {
// Runs a timer to send code to database every 30 seconds
@Override
public void run() {
try {
SendCode(socket);
} catch (Exception e2) {
String stackTrace = Log.getStackTraceString(e2);
sendEmail(stackTrace);
}
}
}, 30000);
} catch (Exception e) {
String stackTrace = Log.getStackTraceString(e);
sendEmail(stackTrace);
}
sendForever();
}
}
}
所以目标是,当调用此方法时,它会检查切换按钮是否处于“ON”状态,然后在它打开时它将运行 SendCode 方法(在发送按钮中工作正常仅一次)然后等待 30 秒。 30 秒结束后,我将再次调用该方法,直到再次按下切换按钮并中断循环。
我遇到的问题是我在汽车的 OBD2 传感器上使用它,它没有使用 sendEmail 方法向我发送错误的堆栈跟踪,所以我无法发布堆栈跟踪现在。
如果有人对出了什么问题或我可以解决这个问题有任何建议,我们将不胜感激。再次,很抱歉现在无法放置堆栈跟踪,如果我能够获得它,我将编辑该帖子。
【问题讨论】:
标签: java android onclicklistener togglebutton android-handler