S.T*_*ane 7 android interface runnable
是否可以在Activity.runOnUiThread()方法后返回一个值.
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int var = SOMETHING;
// how to return var value.
}
});
Run Code Online (Sandbox Code Playgroud)
在这篇文章中,我看到在Runnable.run()方法之后返回值是不可能的.但是如何使用(实现)另一个接口并在执行后返回一个值.
希望一切都清楚.
编辑
可以帮助别人.
我使用D @ Zapl的解决方案,并在Callable类构造函数中传递一个参数,如下所示:
class MyCallable implements Callable<MyObject> {
int param;
public MyCallable (int param) {
// TODO Auto-generated constructor stub
this.param = param;
}
@Override
public MyObject call() throws Exception {
// TODO Auto-generated method stub
return methodReturningMyObject(this.param);
}
}
Run Code Online (Sandbox Code Playgroud)
zap*_*apl 13
如果你真的想这样做,你可以使用期货,Callable它大致是一个Runnable但具有回报价值.
final String param1 = "foobar";
FutureTask<Integer> futureResult = new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int var = param1.hashCode();
return var;
}
});
runOnUiThread(futureResult);
// this block until the result is calculated!
int returnValue = futureResult.get();
Run Code Online (Sandbox Code Playgroud)
这也适用于抛出的异常call,它们将被重新抛出get(),你可以在调用线程中处理它们
try {
int returnValue = futureResult.get();
} catch (ExecutionException wrappedException) {
Throwable cause = wrappedException.getCause();
Log.e("Error", "Call has thrown an exception", cause);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4002 次 |
| 最近记录: |