2013-04-27 58 views
0

上午在android ..我試圖在android中實現線程。但我得到的錯誤。我用Google搜索和獲取答案「的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,這是你的解決方案,它很容易實現,有很多樣本。 – 2013-04-27 05:49:33

+0

你不能在非UI線程上執行UI操作,所以你需要做的是'1'。創建一個處理程序,並使用hanlder.post()'方法來更新用戶界面或使用'runOnUIthread',谷歌搜索約 – Pragnani 2013-04-27 05:54:25

回答

0

使用下面的代碼運行在UI線程中。

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 2013-04-27 07:55:23

+0

然後你必須使用ASyncTask。 – 2013-04-27 08:41:25

0

看起來像你需要在MainActivity中創建你的處理程序,然後進一步傳遞它。像這樣:

private Handler handler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    handler = new Handler(); 
}