从线程 Java/ Android 返回值
Returning value from thread Java/ Android
我的 android class 中有以下主题。如何从线程中获取err的值???
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;
}
我希望该值是该方法的 return 值,但我这辈子都无法获得该值...
您有两种方法可以实现。
糟糕的方式。
创建一个可变对象,如整数的 list,并让 Thread (Runnable) 写入列表。您可以在外部 class / 方法中访问列表中的值。
使用 Callable
而不是 Runnable
。一个Callable
可以return值
否则,您可以使用 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();
}
};
我的 android class 中有以下主题。如何从线程中获取err的值???
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;
}
我希望该值是该方法的 return 值,但我这辈子都无法获得该值...
您有两种方法可以实现。
糟糕的方式。 创建一个可变对象,如整数的 list,并让 Thread (Runnable) 写入列表。您可以在外部 class / 方法中访问列表中的值。
使用
Callable
而不是Runnable
。一个Callable
可以return值
否则,您可以使用 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();
}
};