从线程 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 值,但我这辈子都无法获得该值...

您有两种方法可以实现。

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

  2. 使用 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();
            }
        };