2011-09-29 105 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

我最后阻止的是如果你想要运行某些东西,无论是否有例外被捕获或者它们正在退出该块。所以尝试{...}最后{...}最后{...}是常见的,至少在我的世界里。 –