return a value after Activity.runOnUiThread() method

android, interface, runnable

Solution

If you really want to do it you can use futures and `Callable` which is roughly a `Runnable` but with return value.

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

This also works for exceptions thrown inside `call`, they will be re-thrown from `get()` and you can handle them in the calling thread via

    try {
        int returnValue = futureResult.get();
    } catch (ExecutionException wrappedException) {
        Throwable cause = wrappedException.getCause();
        Log.e("Error", "Call has thrown an exception", cause);
    }

Problem

Is it possible to return a value after `Activity.runOnUiThread()` method. ``` runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub int var = SOMETHING; // how to return var value. } }); ``` In this post i see that it's not possible to return a value after `Runnable.run()` method. But how to use (implement) another interface and return a value after execution. Hope it's clear for all. EDIT May help someone else. I useD @Zapl's solution, and passED a parameter inside the `Callable` class constructor, like this : ``` 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); } } ```

Original source

Related problems