为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2021-12-01 16:09:05
我正在尝试将应用程序数据库保存到 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示例。我该如何解决这个错误?理论上,我需要执行一些授权程序,但我没有找到适合我的案例
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

好的,我终于找到了解决方案。


首先,当用户在这里选择他的帐户时:


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;

}


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信