Read a file from dropbox

依然范特西╮ 提交于 2019-12-14 03:56:54

问题


In my Dropbox file-system, there is a file 'check.txt' that contains a value (0/1) which I have to check every 5 minutes.
The access to Dropbox is successful but the reading of this file is not always right.
At first the file contains 0 and the first reading returns the correct value (0). Then if I manually change the value in 1 into the file, the next reading will return again the value 0 and the correct value is returned after many readings.
I use the Dropbox Synch and my android version is 4.3

This is a part of code:

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

How ca I use file.getNewerStatus() and file.update() or other methods to correctly update the cache files?

Edit:


回答1:


You're on the right track. You need to hold the file open for the Sync API to download new content, and then you need to listen for changes, so be sure to not close it. See https://www.dropbox.com/developers/sync/start/android#listeners. Something like this:

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
            }
        }
    });
}

Once you do this, there's no need to check the file every five seconds... you'll get a notification every time it changes.

(Also, you might want to look into the Datastore API instead.)



来源:https://stackoverflow.com/questions/19797462/read-a-file-from-dropbox

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!