Android - Dropbox数据存储区在应用程序重新启动之前为“空”

时间:2014-07-26 03:53:53

标签: java android dropbox dropbox-api

当我登录我的应用程序并尝试从数据存储区的表中获取大小时,它是空的。但是在我重新启动应用程序之后,它可以正常工作并返回数据存储区表的大小。

就我而言,有两项活动。活动,然后片段,SettingsFragment.java有登录部分。 MainActivity.java活动包含获取数据存储区表大小的部分。

SettingsFragment.java(登录)。

// Dropbox Signin
mAccountManager = DbxAccountManager.getInstance(getActivity().getApplicationContext(), APP_KEY, SECRET_KEY);

mDropBoxPreference = findPreference("preference_sync_dbx");
mDropBoxPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
    public boolean onPreferenceClick(Preference preference) {
        if (mAccountManager.hasLinkedAccount()) {
            mAccountManager.unlink();
        } else {
            mAccountManager.startLink(getActivity(), REQUEST_LINK_TO_DBX);
        }
        return true;
    }
});

MainActivity.java(获取数据存储区大小)。

// Dropbox Get Datastore Size
mAccountManager = DbxAccountManager.getInstance(getApplicationContext(), APP_KEY, SECRET_KEY);

if (mAccountManager.hasLinkedAccount()) {
    DbxAccount mDbxAccount = mAccountManager.getLinkedAccount();
    try {
        mDbxStore = DbxDatastore.openDefault(mDbxAccount);

        mDbxNotesTable = mDbxStore.getTable("notes");
        mDbxNotesCount = mDbxNotesTable.query().count();
        Log.e("mDbxNotesCount", Integer.toString(mDbxNotesCount));
    } catch (DbxException e) {
        e.printStackTrace();
    }
}

假设数据存储区中有3条记录。 登录后,这将显示在Logcat中。

E/mDbxNotesCount﹕ 0

重新启动它后,会显示Logcat。

E/mDbxNotesCount﹕ 3

是什么导致它像这样工作?

编辑:使用smarx的答案后添加了监听器,它有效!这就是我所做的。

mDbxStore.addSyncStatusListener(new DbxDatastore.SyncStatusListener() {
    @Override
    public void onDatastoreStatusChange(DbxDatastore dbxDatastore) {
        if (!dbxDatastore.getSyncStatus().isDownloading) {
            try {
                mDbxStore.sync();
                mDbxNotesCount = mDbxNotesTable.query().count();
            } catch (DbxException e) {
                e.printStackTrace();
            }
            Log.e("mDbxNotesCount", Integer.toString(mDbxNotesCount));
        }
    }
});

1 个答案:

答案 0 :(得分:1)

在您有机会同步之前,您似乎正在尝试阅读数据存储区的内容。您需要等到初始同步完成。我认为一种方法是通过addSyncStatusListener添加一个监听器并等待store.getSyncStatus().isDownloading为假。

但通常您希望遵循的模式是始终显示当前信息...因此,设置一个监听器并在其更改时更新您的UI。这样,无论是初始同步还是从其他设备引入新记录或更新,您的应用都会在信息发生变化时做出相应的响应。