Android上的Dropbox - listDatastores不同步

时间:2014-10-30 16:12:25

标签: android dropbox-api

在链接我的Dropbox帐户后,我尝试将数据存储区名称收集并存储在本地数据库中。当我调试我的应用程序时,一切都很好,我也可以在数据存储区中找到所有名称。但是当我在没有调试的情况下运行应用程序时,我的数据库似乎是空的。

我认为有同步问题,有人可以给我一些线索吗?我还没有找到与我的问题相对应的解决方案。

谢谢你能帮助我!

这是相关代码的一部分:

private void gatherData(){

        db = new SQliteHelper( this ) ;
        Set<DbxDatastoreInfo> datastorePresent = null ;



        try {
            datastorePresent = mDatastoreManager.listDatastores();
        } catch (DbxException e1) {
            e1.printStackTrace();
        }

        Iterator<DbxDatastoreInfo> datastoreLoop = datastorePresent.iterator() ;
        while (datastoreLoop.hasNext()){

            TitleList tit = new TitleList(datastoreLoop.next().id) ;
            tit.setConnectDropbox();
            db.addLists(tit);

        }

        mDatastoreManager.shutDown();

          Intent returnIntent = new Intent();
          boolean syncOK = true ;
          returnIntent.putExtra("result", syncOK) ;
          setResult(RESULT_OK, returnIntent);
          finish();


    }

1 个答案:

答案 0 :(得分:0)

正如@Greg在Dropbox网站上告诉我的那样,有一个tutorial来显示一个监听器。因为它可能对其他一些人有用,下面你会发现我最终使用的代码。请注意,您的类确实已经实现了接口 DbxDatastoreManager.ListListener ,以使此代码可以运行。

代码:

private void gatherData(){

        /**
         * Open the local database
         * Set a listener on the datastore manager to know when data are synced
         * 
         */
        db = new SQliteHelper( this ) ;
        mDatastoreManager.addListListener(this);

    }


    /**
     * 
     * "onDatastoreListChange" is launched once the listener detects datastore is synced,
     * Then all datastore names on dropbox server are stored inside of the local database device
     * 
     * @param arg0
     */
    @Override
    public void onDatastoreListChange(DbxDatastoreManager arg0) {

        // TODO Auto-generated method stub
        Set<DbxDatastoreInfo> datastorePresent = null ;
        try {
            datastorePresent = mDatastoreManager.listDatastores();
        } catch (DbxException e1) {
            e1.printStackTrace();
        }


        Iterator<DbxDatastoreInfo> datastoreLoop = datastorePresent.iterator() ;
        while (datastoreLoop.hasNext()){

            TitleList tit = new TitleList(datastoreLoop.next().id) ;
            tit.setConnectDropbox();
            db.addLists(tit);

        }

          Intent returnIntent = new Intent();
          boolean syncOK = true ;
          returnIntent.putExtra("result", syncOK) ;
          setResult(RESULT_OK, returnIntent);
          finish();

    }