检查互联网连接时,系统不会加载活动

时间:2016-08-28 12:02:27

标签: java android

我正在尝试创建一个在打开时检查互联网连接的应用。只要没有互联网连接和消息,我希望它显示加载屏幕。加载屏幕活动为activity_main.xml。问题是,因为我从它自己调用LoggingIn方法,它一直在重复它,直到我有互联网连接,但问题是由于某种原因它只是不会加载活动本身。它只是向我显示一个空白屏幕。当我不运行LoggingIn时,活动确实有效。

请帮忙还有其他办法吗?

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    LoggingIn();
}

public void LoggingIn ()
{
    if (isNetworkAvailable())
    {
        if (findViewById(R.id.InternetConnection).getVisibility() == View.VISIBLE)
        {
            findViewById(R.id.InternetConnection).setVisibility(View.GONE);
        }
        AttemptLoggingIn();
    }
    else
    {
        findViewById(R.id.InternetConnection).setVisibility(View.VISIBLE);
        LoggingIn();


    }
}
private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager
            = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

2 个答案:

答案 0 :(得分:1)

使用后台线程而不是非常奇怪的方法。

例如,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startCheck();
}


    private boolean startCheck() {
        new Thread(new Runnable() {

                        @Override
                        public void run() {
        runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                          findViewById(R.id.InternetConnection).setVisibility(View.VISIBLE);
                    }
                });

        while(!isNetworkAvailable()) {

        try {
                                    Thread.sleep(100L);// 100 ms sleep
                                } catch (InterruptedException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
        }
        runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (findViewById(R.id.InternetConnection).getVisibility() == View.VISIBLE)
                {
                    findViewById(R.id.InternetConnection).setVisibility(View.GONE);
                }
                AttemptLoggingIn();
                    }
                });

        }
                    }).start();
    }

答案 1 :(得分:0)

您无需调用LoggingIn()来监控网络更改。

每当连接细节发生变化时,ConnectivityManager都会自动广播CONNECTIVITY_ACTION操作。本文对您非常有用:

http://www.androidhive.info/2012/07/android-detect-internet-connection-status/