2015-02-23 1 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

+0

@Astora - В случае Android вы также можете использовать обработчик. :) – TheLostMind

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

Это то, что я делаю, когда мой Runnable и Handler находятся в разных классах^_^

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(); 
      } 
     };