android - 使用void方法使用BoltsFramework的continueWith和onSuccess方法

时间:2016-10-24 10:57:02

标签: android asynchronous tcpclient bolts-framework

我的TcpClient中有两种方法。第一个是startListener,然后我connect。他们都返回void

在我当前的TcpClient实施中,应用程序崩溃,如果我startListener然后connect就在它之后(我猜它们之间需要一段时间?)。实施时间为here,来自SimpleTCPLibrary(他startListener onStart(),并且连接按钮触发connect

我想做的是做startListener,什么时候成功完成 - >做connect。我无法使用 BoltsFramework&#39> continueWithonSuccess找到显示如何执行此操作的示例。

那里有没有例子?

2 个答案:

答案 0 :(得分:1)

您可以随时尝试

Task.delay(200).continueWith(new Continuation<Void, Object>() {
    @Override
    public Object then(Task<Void> task) throws Exception {
        ... connect();
        return null;
    }
});

答案 1 :(得分:1)

    Task.callInBackground(new Callable<Void>() { //or `Task.call` for synchronous
        @Override
        public Void call()
                throws Exception {
            /*... startListener */
            return null;
        }
    }).continueWithTask(new Continuation<Void, Task<Void>>() {
        @Override
        public Task<Void> then(Task<Void> ignored)
                throws Exception {
            return Task.delay(200);
        }
    }).continueWith(new Continuation<Void, Void>() {
        @Override
        public Void then(Task<Void> ignored)
                throws Exception {
            /*... connect */
            return null;
        }
    });

或与lambdas:

Task.call(() -> { TcpClient.startListener(); return null; })
    .continueWithTask(ignored -> Task.delay(200))
    .continueWith(ignored -> { TcpClient.connect(); return null; });