2014-10-22 4 views
0

Я создаю приложение для Android, у которого есть экран входа. Я сделал то, что всякий раз, когда пользователь нажимает кнопку отправки, он запускает progressdialog. затем вызовите новый поток, чтобы проверить логин. Когда я пытаюсь запустить тост в функции внутри входа, приложение внезапно падает. То, что я с ним сделал это:Android-приложение, сбой при попытке запуска тоста в try catch

loginButton.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
       dialog = ProgressDialog.show(MainActivity.this, "", 
         "Validating user...", true); 
      new Thread(new Runnable(){ 
       public void run(){ 


        login(); 
       } 
      }).start(); 
     } 

    }); 

тогда моя функция Логина заключается в следующем:

void login(){ 

try{ 
//some code 
} catch(Exception e){ 

dialog.dismiss(); 
Context context = getApplicationContext(); 
CharSequence text = "Hello toast!"; 
int duration = Toast.LENGTH_SHORT; 

Toast toast = Toast.makeText(context, text, duration); 
toast.show(); 

} 

Но по какой-то причине, как только он переходит к функции улова приложение неожиданно завершает работу в аварийном только тогда, когда я добавляю код для тоста. Что не так с моим кодом и почему он падает только тогда, когда я использую тосты?

+0

Вы посмотрели на LogCat исключения? – panini

ответ

1

Тост в другой рабочей нити?

Можете ли вы поставить тост в runOnUiThread()?

+0

Я просто передал весь тост на runOnUiThread(). Почему это так? это потому, что я поместил тост в новый поток, который я использовал для запуска функции входа? – marchemike

+0

тост должен отображаться в потоке пользовательского интерфейса – liuzhidong

0

Вы пробовали отлаживать свой код? Вероятно, вы получаете нулевой указатель из getApplicationContext(), поскольку вы вызываете его из своего потока. Объявите переменный контекст где-нибудь и используйте эту переменную, чтобы сделать Toast (если вам это нужно).