我尝试检查与timer.i的互联网连接,例如每隔5秒检查连接。我写了一些代码,但我有错误这是我的来源
public class BroadCastSampleActivity extends Activity {
TimerTask mTimerTask;
Timer mTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTimerTask = new TimerTask() {
@Override
public void run() {
ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected()) {
Toast.makeText(getApplicationContext(), "net Started",
Toast.LENGTH_LONG).show();
}
}
};
mTimer = new Timer();
mTimer.scheduleAtFixedRate(mTimerTask, 1000, 5000);
}
}
这是我的日志错误
我究竟做错了什么?如果有人知道解决方案,请帮助我
P.S
我想检查互联网连接,例如Facebook,我不知道我的解决方案(我的意思是计时器)是更好的方式。
答案 0 :(得分:0)
您无法从非UI线程调用toast。所以,处理程序会帮助你。如果您将在生产代码中删除Toast错误将自行进行。更多的是处理程序的解决方法。
Handler handler = new Handler();
mTimerTask = new TimerTask() {
@Override
public void run() {
ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected()) {
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "net Started",
Toast.LENGTH_LONG).show();
}
});
}
}
};
答案 1 :(得分:0)
替换
Toast.makeText(getApplicationContext(), "net Started", Toast.LENGTH_LONG).show();
与
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "net Started", Toast.LENGTH_LONG).show();
}
});