2011-09-29 103 views
2

我陷入了以下問題。如果我的應用程序未檢測到網絡連接,我希望退出該應用程序。我的應用程序以啓動屏幕啓動。如果沒有網絡連接,可以顯示啓動屏幕,然後是烤麪包在device.and然後終止該應用程序在飛濺屏幕上顯示Toast Android

我在我的啓動畫面代碼是這樣的:

裏面的onCreate()

ConnectivityManager connectivitymanager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkinfo = connectivitymanager.getActiveNetworkInfo(); 
     connected = networkinfo != null && networkinfo.isAvailable() 
       && networkinfo.isConnected(); 
     Log.v("Network state : ", connected + ""); 

     Thread splashThread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        int waited = 0; 
        while (waited < 5000) { 
         sleep(100); 
         waited += 100; 
        } 
       } catch (InterruptedException e) { 
        // do nothing 
       } finally { 
        Looper.prepare(); 
        if (connected == false) { 
         Toast.makeText(
           splashscreenActivity.this, 
           "No Network Connection is available on device.", 
           Toast.LENGTH_LONG).show(); 
         finish(); 
         System.exit(0); 
        } else { 
         finish(); 
         startActivity(new Intent(splashscreenActivity.this, 
           mainActivity.class)); 
        } 
        Looper.loop(); 
       } 
      } 
     }; 
     splashThread.start(); 

1,請看看我的代碼,並指導我我該怎麼表示敬酒。 2.Or建議我一些其他更好的方式來做到這一點

感謝

編輯:

謝謝大家的回答:

我選擇表示用濺射屏幕活動吐司達門德拉的方式:

適用的代碼是:

if (connected == false) { 
      splashscreenActivity.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        Toast.makeText(splashscreenActivity.this, 
          "No Internet Connection.", 3000).show(); 
       } 
      }); 
      finish(); 
     } else { 
      //migrate to main activity from splashscreen 
     } 
+0

爲什麼不在顯示啓動畫面之前進行檢查,所以在你啓動線程之前。或者,在下一個活動控制的啓動畫面傳遞給它之後執行此操作。 –

+0

1)finish(); 2)startActivity(新意圖(splashscreenActivity.this, mainActivity.class)); 也許 2) 1) – drifter

+0

當啓動畫面顯示時我們不能顯示烤麪包嗎? – Shruti

回答

2

你正在創建並顯示吐司從線程,這樣可以不叫

你必須編寫代碼

splashscreenActivity.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        Toast.makeText(c, "Internet connection not currently available.", 3000).show(); 
       } 
      }); 
0

只需添加一個的if else塊。(使用UR連接網絡信息)

if(connected){ 
//put the splash thread here 
}else{ 
finish(); 
} 
+0

Thanx回覆Walid Hossain,但我應該在哪裏顯示吐司? – Shruti

3

你可以像這樣做,使用處理程序。把在其他條件

Handler mHandler = new Handler(Looper.getMainLooper()); 

mHandler.post(new Runnable() { 
           public void run() { 

            Toast.makeText(Splash.this, "Network error", Toast.LENGTH_LONG).show(); 
             finish(); 

           } 
          }); 

或者下面的代碼,我在我的應用程序這樣做:

if(status.equals("CONNECTED")) 
         { 
         startActivity(new Intent(Splash.this,Activity.class)); 
         finish(); 
         }else 
         { 
         startActivity(new Intent(Splash.this,NetworkError.class)); 
         finish(); 
         } 

其中NetworkError類顯示了類似的圖像的另一佈局「無網絡,,,,」(或任何你想展示,而不是飛濺...)的

+0

+1 - 我喜歡第二個活動的想法,而不是使用烤麪包。 –

+0

是的nibha我也喜歡你的方法.. :)謝謝你給我一個更多的選擇:) – Shruti

0

一個最後,如果你不塊用於希望捕捉任何例外。在你的代碼中,把所有的代碼放在一個else循環中,如果時間超過5000,那麼去else語句並執行它。如果你添加catch,你可以最終刪除。

+0

好Rashmi B ..我會照顧它 – Shruti

+0

我最後阻止的是如果你想要運行某些東西,無論是否有例外被捕獲或者它們正在退出該塊。所以嘗試{...}最後{...}最後{...}是常見的,至少在我的世界裏。 –