从线程Java / Android返回值

时间:2015-02-23 07:08:42

标签: java android java-threads

我的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;
}

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

3 个答案:

答案 0 :(得分:4)

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

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

  2. 使用Callable代替RunnableCallable可以返回值

答案 1 :(得分: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.

    }
};

答案 2 :(得分: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();
            }
        };