从线程Java / Android返回值

我的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; } 

我希望该值是方法的返回值,但对于我的生活,我无法获得价值……

你有两种方法可以实现这一目标。

  1. 糟糕的方式。 创建一个可变对象,如整数列表 ,让Thread(Runnable)写入列表。 您可以访问外部类/方法中列表中的值。

  2. 使用Callable而不是RunnableCallable可以返回值

否则,您可以使用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. } }; 

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