2013-04-27 3 views
0

Я новичок в android .. Я пытаюсь реализовать поток в android. Но я получаю сообщение об ошибке .. Я гугле и получить ответ «AsyncTask», но действительно я не знаю, как реализоватьОшибка при внедрении потока android

Сообщение об ошибке

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

мой код

final Thread thread = new Thread(){ 
         @Override 
          public void run() { 
          try { 
           DatabaseHandler dbh = new DatabaseHandler(test.this); 
           result=dbh.Verify(1); 
           if(result != ""){ 

            getData(); 
            progress.dismiss(); 

           } 
           else{ 


           } 
          } catch (Exception e) { 
           e.printStackTrace(); 
          } 
         } 
        }; 
        thread.start(); 
+0

Используйте ASyncTask, это решение для вас, и его очень легко реализовать, там есть куча образцов. –

+0

Вам не разрешено выполнять работу с пользовательским интерфейсом на неликонечном интерфейсе, поэтому вам нужно сделать это '1. Создайте обработчик и используйте метод hanlder.post() 'для обновления пользовательского интерфейса или использования' runOnUIthread', выполните поиск в google о том же – Pragnani

ответ

0

Используйте следующий код для запуска в потоке пользовательского интерфейса.

Runnable runnable = new Runnable() { 
      @Override 
      public void run() { 
       handler.post(new Runnable() { // This thread runs in the UI 
        @Override 
        public void run() { 
         DatabaseHandler dbh = new DatabaseHandler(test.this); 
          result=dbh.Verify(1); 
          if(result != ""){ 

          getData(); 
          progress.dismiss(); 

         } 
         else{ 


         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 
    }; 
    new Thread(runnable).start(); 
+0

спасибо .. но если я хочу вызвать другой вызов базы данных в функции getData(), то что я сможет сделать ? – user2316344

+0

Затем вы должны использовать ASyncTask. –

0

Похоже, что вам нужно создать своего обработчика в MainActivity, а затем передать его дальше. Вроде так:

private Handler handler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    handler = new Handler(); 
} 
Смежные вопросы