Показать тост на SplashScreen 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. Или посоветуйте мне другой способ лучше сделать это.

Спасибо

РЕДАКТИРОВАТЬ :

Всем спасибо за ответы:

Я выбрал способ Дхармендры показывать тост с помощью заставки:

Код, который сработал:

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
        }

person Shruti    schedule 29.09.2011    source источник
comment
Почему бы не сделать проверку перед тем, как показать заставку, так что еще до того, как вы начнете обсуждение. Или сделайте это после того, как будет передан экран-заставка следующего элемента управления действиями.   -  person James Black    schedule 29.09.2011
comment
1) finish (); 2) startActivity (новое намерение (splashscreenActivity.this, mainActivity.class)); Может быть 2) 1)   -  person drifter    schedule 29.09.2011
comment
мы не можем показывать тост, когда отображается заставка ??   -  person Shruti    schedule 29.09.2011


Ответы (4)


Вы создаете и показываете тост из потока, поэтому его нельзя вызывать

Вы должны написать этот код

splashscreenActivity.this.runOnUiThread(new Runnable() {

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

Вы можете сделать это так, используйте Handler. Поместите следующий код в условие else

  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 показывает другой макет с изображением типа «Нет сети ,,,» (или что угодно, что вы хотите показать вместо заставки ...)

person Nibha Jain    schedule 29.09.2011
comment
+1 - Мне больше нравится идея второго занятия, чем тост. - person James Black; 29.09.2011
comment
Да нибха, мне тоже понравился твой подход .. :) спасибо, что показали мне еще один вариант :) - person Shruti; 29.09.2011

Просто добавьте блок if else. (Используя информацию о сети вашего соединения)

if(connected){
//put the splash thread here
}else{
 finish();
}
person Walid Hossain    schedule 29.09.2011
comment
Спасибо за ответ Валиду Хоссейну, но где мне показать тост? - person Shruti; 29.09.2011

Блок finally используется, если вы не хотите перехватывать исключения. В своем коде поместите весь свой код в цикл else. Если время 5000 истекло, перейдите к оператору else и выполните его. Если вы добавляете улов, вы можете окончательно удалить.

person Rashmi.B    schedule 29.09.2011
comment
Я наконец блокирую, если вы хотите, чтобы что-то запускалось, независимо от того, было ли исключение поймано или они выходят из этого блока. Так что попробуйте {...} поймать {...} наконец {...} - это обычное дело, по крайней мере, в моем мире. - person James Black; 29.09.2011