2

私の Dropbox ファイル システムには、値 (0/1) を含む「check.txt」というファイルがあり、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
            }
        }
    });
}

これを行うと、ファイルを 5 秒ごとにチェックする必要がなくなります。ファイルが変更されるたびに通知が届きます。

(また、代わりにDatastore APIを調べることもできます)。

于 2013-11-05T23:30:27.360 に答える