2012-03-14 68 views
1

可能重複:
Android : CalledFromWrongThreadException;: Only the original thread that created a view hierarchy can touch its views如何處理

現在我上application.I工作要以顯示一個進度條,直到我從被調用的方法得到一個真實的回覆。我使用下面的代碼。

progressBar = new ProgressDialog(this); 
     progressBar.setCancelable(true); 
     progressBar.setMessage("Loading"); 
     progressBar.show(); 

new Thread(new Runnable() { 


    @Override 
    public void run() { 
     // TODO Auto-generated method stub 

     final boolean flag= GetFixtureDetailsJsonFunction(); 

     if (flag==true) { 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      progressBar.dismiss(); 
     } 

    } 
}).start(); 



protected boolean GetFixtureDetailsJsonFunction() 
{ 
    //some code 
    return true; 
} 

但我得到異常

03-14 15:48:23.722: E/AndroidRuntime(910): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

請幫我的朋友

回答

0

你的問題是你的一個線程試圖訪問屬於另一個線程的數據,你不能這樣做,因爲這可能會導致嚴重的數據損壞。

請按照以下文章解決問題。

http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html

+0

更新您的問題謝謝...如何我可以更改代碼嗎?處理器類中的 – sarath 2012-03-14 10:52:15

+0

可以調用progressBar.dismiss();然後從線程調用處理程序對象。 – Mayank 2012-03-14 10:56:13

0

改變你解僱進度如下的方式:

新主題(新的Runnable(){

@Override 
public void run() { 
    // TODO Auto-generated method stub 

    final boolean flag= GetFixtureDetailsJsonFunction(); 

    if (flag==true) { 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     //dismissing prograssBar on UI thread 
     Your_Activity_Class.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       progressBar.dismiss(); 
      } 
     }); 
    } 

} 
}).start(); 

實際上你是在一個單獨的線程(非UI線程)上解僱了prograssBar,這是錯誤的,這就是爲什麼你得到這個異常。但是,通過使用上面的代碼,它會關閉您的UI線程上的prograssBar。

+0

感謝您的答覆...所以不是新主題(新的Runnable(){} 有..我用Activity_Class.this.runOnUiThread(新的Runnable(){} 或我有在新線程(new Runnable(){ })塊內創建Activity_Class.this.runOnUiThread(新Runnable(){ })以解除進度條...我必須做什麼? – sarath 2012-03-14 10:55:32

+0

是的,您需要在其內部執行它檢查我的更新回答 – waqaslam 2012-03-14 10:58:50

+0

然後我也得到同樣的例外 – sarath 2012-03-14 12:04:37