13

我工作的現場項目。並當用戶點擊該應用程序。出現歡迎屏幕(在該屏幕上有一個webview)。如果互聯網沒有連接,那麼應用程序崩潰。基本上,我的問題是以編程方式檢查移動設備是否連接到互聯網。如果沒有,那麼從Web服務數據不提取到網頁視圖,並顯示一個對話框,顯示「請檢查您的Internet連接」Android的 - 編程檢查網絡連接和顯示對話框,如果notConnected

一邊做研究,我發現很多事情,我試圖實現這一點。但是,它不符合我的要求

我的代碼,

public boolean isOnline() { 
    ConnectivityManager cm = 
     (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    else 
    { 
     Description.setVisibility(View.INVISIBLE); 
     new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(
       getResources().getString(
         R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
    } 
    return false; 
} 

我打電話doInBackground()此功能的AsyncTask

請幫助!

+0

這是否檢查Internet連接或無線連接。我懷疑後者,並且互聯網連接只能通過ping驗證? – carl

回答

10

最後,我得到了答案。

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = conMgr.getActiveNetworkInfo(); 
if (netInfo == null){ 
    Description.setVisibility(View.INVISIBLE); 
    new AlertDialog.Builder(WelcomePage.this) 
     .setTitle(getResources().getString(R.string.app_name)) 
     .setMessage(getResources().getString(R.string.internet_error)) 
     .setPositiveButton("OK", null).show(); 
}else{ 
    dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false); 
    new Welcome_Page().execute(); 
} 
+1

上打開一個問題,這不應該是預期的答案,因爲你自己問如何檢查互聯網連接而不是網絡連接,上面的答案顯示後者部分 – therealprashant

+1

如果設備連接到網絡但沒有數據(互聯網)餘額使用,則將執行Welcome_Page() – Khan

0

doInBackground在不同的線程比主UI運行,所以你不能在這裏創建一個顯示一個對話框。請改爲在AsyncTask中覆蓋onPreExecute,然後在那裏進行測試。

+0

我的代碼是對還是錯? –

+0

@Java_Android它對我來說看起來不錯 - 它只是需要移動到一個不同的方法(一個在UI線程中運行的方法)。 – Phil

+0

@ Phil ..不在onCreate()中工作。 –

-2

互聯網連接也檢查無論是在onCreate()onResume()方法。不需要在AsyncTask中調用。

,或者你可以調用之前調用的AsyncTask execute()方法

if(isOnline) 
{ 
    MyAsyncTask task=new MyAMyAsyncTask(); 
    task.execute(); 

} 

else 
{ 
// no internet connection 
} 
+0

我試了兩次。但仍然給出錯誤... –

+0

當你嘗試這樣的時候你得到了什麼錯誤? –

19

你可以籤這個庫:

https://github.com/novoda/merlin

你只implement Connectable,你會得到一個回調,當網絡下降或出現。

因此,你可以展示你在這種情況下對話框。

您還可以查詢當前狀態的庫,並選擇不這樣做你的網絡任務

example

創建梅林(使用Merlin.Builder())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context); 

和綁定在您的活動中解除服務

@Override 
protected void onResume() { 
    super.onResume(); 
    merlin.bind(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    merlin.unbind(); 
} 

Reg ister回調

merlin.registerConnectable(new Connectable() { 
     @Override 
     public void onConnect() { 
      // Do something! 
     } 
}); 

演示中的MerlinActivity顯示了一個簡單的方法來從您的主應用程序代碼簡化房間梅林。

+0

我非常抱歉...我不能讓你..你可以請解釋更簡單的形式.. –

+0

如果你轉到https://github.com/novoda/merlin並向下滾動,閱讀閱讀我,它解釋它非常簡單 – Blundell

+0

好的......謝謝。 –

5

這是檢查您的Internet連接的簡單功能。如果連接返回true否則爲false。

public boolean isInternetOn() { 

     // get Connectivity Manager object to check connection 
     ConnectivityManager connec = 
       (ConnectivityManager) getSystemService(getBaseContext().CONNECTIVITY_SERVICE); 

     // Check for network connections 
     if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || 
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || 
       connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { 


      return true; 

     } else if (
       connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || 
         connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { 


      return false; 
     } 
     return false; 
    } 
} 

下面是檢查互聯網連接,並檢查該網址無效或包含服務器this項目。

1

我已經嘗試了上述不同的方法,除此之外,我在某些情況下被捕獲。所以最後,我使用下面的代碼片段進行網絡調用...

try { 
    InetAddress address = InetAddress.getByName("www.stackoverflow.com"); 
    //Connected to working internet connection 
} catch (UnknownHostException e) { 
    e.printStackTrace(); 
    //Internet not available 
} 

這在許多方面都很有用。如果在這種方法中不好,請告訴我。

1

檢查互聯網連接

ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = mgr.getActiveNetworkInfo(); 

     if (netInfo != null) { 
      if (netInfo.isConnected()) { 
       // Internet Available 
      }else { 
       //No internet 
      } 
     } else { 
      //No internet 
     }