2016-08-28 83 views
1

我正在嘗試創建一個應用程序,用於在打開Internet連接時檢查它。只要沒有互聯網連接和信息,我希望它顯示一個加載屏幕。加載屏幕活動是activity_main.xml。問題是,因爲我從本身調用LoggingIn方法,它會不斷重複它直到我有Internet連接,但問題是,由於某些原因它不會加載活動本身。它只是給我一個空白的屏幕。當我不運行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

我建議您閱讀[這](https://developer.android。 COM /訓練/監視裝置狀態/連通性monitoring.html)。您可以使用回調代替以您的方式檢查它。乾杯 –

+0

這到底是什麼?目前的檢查? – Vyacheslav

+0

@AugustoCarmo你是什麼意思使用回調?我的意思是我仍然想不斷檢查互聯網連接,在這種情況下如何使用回調將幫助我?感謝您的時間! – morha13

回答

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(); 
    } 
+0

非常感謝!我仍然不知道你在這裏做了什麼,但它修復了它!現在我要讀你在這裏做了什麼:P – morha13

+0

大聲笑。這個想法是啓動另一個線程,只有當網絡改變時纔會觸及用戶界面。 – Vyacheslav

+0

所以基本上只要沒有互聯網連接,它就會一直在中間循環,當它連接到代碼的其餘部分時? – morha13