2

在我的 Dropbox 文件系统中,有一个文件“check.txt”,其中包含一个值 (0/1),我必须每 5 分钟检查一次。
对 Dropbox 的访问是成功的,但是这个文件的读取并不总是正确的。
起初文件包含 0,第一次读取返回正确的值 (0)。然后,如果我手动将 1 中的值更改为文件,下一次读取将再次返回值 0,并在多次读取后返回正确的值。
我使用 Dropbox Synch,我的 android 版本是 4.3

这是代码的一部分:

public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    try {       
        DbxAccountManager AcctMgr = DbxAccountManager.getInstance(getApplicationContext(), DropboxActivity.appKey, DropboxActivity.appSecret);          
        DbxFileSystem dbxFs = DbxFileSystem.forAccount(AcctMgr.getLinkedAccount());

        DbxFile file = dbxFs.open(DropboxActivity.path);

        DbxFileStatus status = file.getSyncStatus();
        if (!status.isCached) {
            file.addListener(new DbxFile.Listener() {
                @Override
                public void onFileChange(DbxFile file) {
                    try {
                        if (file.getSyncStatus().isCached) {
                          file.update();
                          // deal with the new value
                          Log.e("TAG", "*** VALUE *** " + file.readString());
                        }
                    } catch (DbxException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
        }

        if((file.readString()).equals("0")) { 
            Log.d("TAG", "Value: " + file.readString());    

        }
        else { 
            Log.d("TAG", "Value: " + file.readString());
            flag = 1;

            stopAlarm();                
            startService(new Intent(this, GpsService.class));

        }

        file.close();

    } catch(Exception e) {
        e.printStackTrace();
    }



    stopSelf();

    return startId;
}

如何使用file.getNewerStatus()file.update()/或其他方法正确更新缓存文件?

编辑:

4

1 回答 1

1

你在正确的轨道上。您需要保持文件打开以便 Sync API 下载新内容,然后您需要监听更改,因此请务必不要关闭它。请参阅https://www.dropbox.com/developers/sync/start/android#listeners。像这样的东西:

DbxFileStatus status = testFile.getSyncStatus();
if (!status.isCached) {
    testFile.addListener(new DbxFile.Listener() {
        @Override
        public void onFileChange(DbxFile file) {
            if (file.getSyncStatus().isCached) {
              file.update();
              // deal with the new value
            }
        }
    });
}

执行此操作后,无需每五秒检查一次文件……每次更改时您都会收到通知。

(此外,您可能希望改为查看Datastore API。)

于 2013-11-05T23:30:27.360 回答