尝试获取 appDataFolder 中的文件列表时出现 GoogleAuthIOException

我正在尝试将应用程序数据库保存到 Google Drive 上的 Apps 文件夹中。我正在使用 Drive v3 API。几个月前一切正常,数据成功保存到用户 appData 文件夹。但是现在,我收到了 GoogleAuthIOException。我的应用在 Google 控制台中有所有必需的 API 密钥(oAuth、Drive API)


这是我的代码:


首先,向用户显示一个对话框,以获取他的帐户:


mCredential = GoogleAccountCredential.usingOAuth2(

        getApplicationContext(), Collections.singletonList(DriveScopes.DRIVE_APPDATA))

        .setBackOff(new ExponentialBackOff());

//...

startActivityForResult(

                    mCredential.newChooseAccountIntent(),

                    REQUEST_ACCOUNT_PICKER);

//...

if (resultCode == RESULT_OK && data != null &&

                    data.getExtras() != null) {

                String accountName =

                        data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);

                if (accountName != null) {

                    mCredential.setSelectedAccountName(accountName);

 }

}

接下来,我执行 AsyncTask,检查文件夹中的当前文件(删除它,如果需要)并将当前数据库保存在其中。

我如何从错误中看到 - 身份验证问题。但我所有的代码都来自 Google 的Java示例。我该如何解决这个错误?

理论上,我需要执行一些授权程序,但我没有找到适合我的案例


慕侠2389804
浏览 155回答 1
1回答

ibeautiful

好的,我终于找到了解决方案。首先,当用户在这里选择他的帐户时:startActivityForResult(                mCredential.newChooseAccountIntent(),                REQUEST_ACCOUNT_PICKER);我使用setSelectedAccount(account, "package"), 而不是setSelectedAccountName(accountName)我在 AsyncTask 中又添加了一个捕获,它创建了一个请求许可的对话框(如官方文档中所述):        try {            fileList = mService.files().list().setSpaces("appDataFolder").execute();            //...            return null;        } catch (UserRecoverableAuthIOException e) {            e.printStackTrace();            errorCode = 1;            startActivityForResult(e.getIntent(), REQUEST_SIGNIN_REQUIRED);            return true;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java