如何在android

时间:2015-11-15 05:08:50

标签: java android azure asynchronous

我正在研究使用离线同步功能的azure-android。我必须同步多个表。目前我正在这样做,如下所示。对于每个表我称之为拉方法,目前我看到的是每一个都被逐一拉出。我想以异步方式执行此操作,我还需要等待所有表同步。

   public void syncAsync(){
        if (isNetworkAvailable()) {
            new AsyncTask<Void, Void, Void>() {

                @Override
                protected Void doInBackground(Void... params) {
                    try {

                        mItemsTable.pull(mPullQuery_Items).get();
                        mCustomerTable.pull(mPullQuery_Customer).get();
                        mSalesTable.pull(mPullQuery_Sales).get();
         //Few more tables to pull.                            
                    } catch (Exception exception) {
                        exception.printStackTrace();
                    }
                    finally {
                    }
                    return null;
                }
            }.execute();
        } else {
    //error
        }
    }

我看到Microsoft使用ListneableFuture并试图从

中读取一些信息

This link

我在链接

中看到了此代码示例

列表&gt;查询; // 查询会转到所有不同的数据中心,但我们要等到它们全部完成或失败。

ListenableFuture<List<QueryResult>> successfulQueries = Futures.successfulAsList(queries);

Futures.addCallback(successfulQueries, callbackOnSuccessfulQueries);

我正在尝试更改我的代码,但我无法理解如何执行此操作。我想等到他们都完成了(所有桌子都拉了)并需要一个成功或失败的清单。由于我是Java的初学者,因此很难理解如何修改。

1 个答案:

答案 0 :(得分:0)

@Nasir 函数successfulAsList中给出的参数是ListenableFuture类型的varargs或包含ListenableFuture类型值的列表,请参阅http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/Futures.html#successfulAsList(com.google.common.util.concurrent.ListenableFuture...)

所以你需要将进程mXxxTable.pull().get()包装在一个对象实现接口Callable作为接口submit的函数ListeningExecutorService的参数,以获得{{1}对于successAsList的一个varargs(或列表)的对象。

下面有一个测试演示作为参考。博客http://codingjunkie.net/google-guava-futures/解释了更多细节。

ListenableFuture