android检查与计时器的互联网连接

时间:2015-02-03 13:43:41

标签: android broadcastreceiver android-broadcast internet-connection

我尝试检查与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);

}

}

这是我的日志错误 enter image description here 我究竟做错了什么?如果有人知道解决方案,请帮助我 P.S 我想检查互联网连接,例如Facebook,我不知道我的解决方案(我的意思是计时器)是更好的方式。

2 个答案:

答案 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();
    }
});