1

我的 android 类中有以下线程。如何从线程中获取 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;
}

我希望该值成为该方法的返回值,但是对于我的一生,我无法获得该值...

4

3 回答 3

4

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

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

  2. 使用 aCallable而不是 a Runnable。ACallable可以返回值

于 2015-02-23T07:11:28.887 回答
0

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

    }
};
于 2015-02-23T07:21:01.510 回答
0

当我的 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();
            }
        };
于 2016-08-15T04:24:42.750 回答