2015-02-23 79 views
1

我在我的android類中有以下線程。我如何從線程中獲得err的值?從線程Java/Android返回值

public int method(){ 
new Thread(new Runnable() { 
     int err; 

     @Override 
     public void run() { 
      err = device.verify(30, 5, coderChoice, detectModeChoice, 
         0, listSearch, callbackCmd, MTFPSD.this, matchingScore); 
      updateView("Finger Captured Successfully", err); 

     } 
    }).start(); 

return err; 
} 

我想要的值是該方法的返回值,但對我的生活,我不能得到的價值...

回答

3

你實現這一目標的方法有兩種。

  1. 不好的方式。 創建一個可變對象,如整數的列表,並讓Thread(Runnable)寫入列表。您可以訪問外部類/方法列表中的值。

  2. 使用Callable而不是Runnable。一個Callable可以返回值

+0

非常感謝您!我會嘗試他們兩個。 – Astora 2015-02-23 07:15:05

+0

@Astora - 在Android的情況下,你也可以使用一個處理程序。 :) – TheLostMind 2015-02-23 08:23:44

0

否則,您可以使用Handler趕上err值。

public void method(){ 
    new Thread(new Runnable() { 
      int err; 

      @Override 
      public void run() { 
       err = device.verify(30, 5, coderChoice, detectModeChoice, 
          0, listSearch, callbackCmd, MTFPSD.this, matchingScore); 
       updateView("Finger Captured Successfully", err); 

       mHandler.sendEmptyMessage(err); 

      } 
     }).start(); 

    return; 
    } 

Handler mHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message msg) { 
     int err = msg.what; 

     // something to do. 

    } 
}; 
0

這是我做的時候,我可運行和處理程序在不同的班級^ _^

public void task(final Handler h){ 


     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       //Do something... 

       Bundle bundle = new Bundle(); 
       bundle.putString("Value", "Done"); 
       Message toDeliver = new Message(); 
       toDeliver.setData(bundle); 
       h.sendMessage(toDeliver); 

      } 
     }; 

     Thread thread = new Thread(r); 
     thread.start(); 

    } 



Handler h = new Handler(){ 
      @Override 
      public void handleMessage(Message msg) { 
       Bundle bundle = msg.getData(); 
       String result = bundle.getString("Value"); 
       Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); 
      } 
     };