我正在尝试创建一个在打开时检查互联网连接的应用。只要没有互联网连接和消息,我希望它显示加载屏幕。加载屏幕活动为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();
}
答案 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/