Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何正确使用谷歌硬盘RESTAPI?_Android_Rest_Google Drive Api - Fatal编程技术网

Android 如何正确使用谷歌硬盘RESTAPI?

Android 如何正确使用谷歌硬盘RESTAPI?,android,rest,google-drive-api,Android,Rest,Google Drive Api,我有一个应用程序,我想上传SQLite数据库文件到用户的谷歌驱动器帐户 由于GoogleAndroidAPI将停止工作,我想实现RESTAPI,实现RESTAPI需要身份验证。我正在使用谷歌登录,但RESTAPI需要某种类型的访问令牌怎么才能得到呢? 我在开发人员控制台中创建了一个帐户,启用了驱动器API,并添加了驱动器/auth的作用域 我使用官方文档实现了登录功能 使用此代码,我可以获得用户的电子邮件以及创建DriveService GoogleSignInOptions googl

我有一个应用程序,我想上传SQLite数据库文件到用户的谷歌驱动器帐户

由于GoogleAndroidAPI将停止工作,我想实现RESTAPI,实现RESTAPI需要身份验证。我正在使用谷歌登录,但RESTAPI需要某种类型的访问令牌怎么才能得到呢?

我在开发人员控制台中创建了一个帐户,启用了驱动器API,并添加了驱动器/auth的作用域

我使用官方文档实现了登录功能

使用此代码,我可以获得用户的电子邮件以及创建DriveService

    GoogleSignInOptions googleSignInOptions = new 
    GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(DriveScopes.DRIVE))
                .requestEmail()
                .build();

    googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);

    Intent googleSignInIntent = googleSignInClient.getSignInIntent();
    startActivityForResult(googleSignInIntent, REQUEST_CODE_SIGN_IN);
在on activity result中,我可以获得用户帐户,使用该帐户我创建了一个DriveServiceHelper

    mDriveServiceHelper = new DriveServiceHelper(getGoogleDriveService(getApplicationContext(), googleSignInAccount, "appName"));

现在的问题是,当我尝试创建文件夹时,它显示了一个关于(UserRecoverableAuthIOException)的错误,

请参阅创建文件夹时使用的代码

public Task<GoogleDriveFileHolder> createFolder(final String folderName, @Nullable final String folderId) {
        return Tasks.call(mExecutor, new Callable<GoogleDriveFileHolder>() {
            @Override
            public GoogleDriveFileHolder call() {
                GoogleDriveFileHolder googleDriveFileHolder = new GoogleDriveFileHolder();

                List<String> root;
                if (folderId == null) {
                    root = Collections.singletonList("root");
                } else {

                    root = Collections.singletonList(folderId);
                }
                File metadata = new File()
                        .setParents(root)
                        .setMimeType(DriveFolder.MIME_TYPE)
                        .setName(folderName);

                File googleFile = null;
                googleFile = mDriveService.files().create(metadata).execute();
                googleDriveFileHolder.setId(googleFile.getId());
                return googleDriveFileHolder;
            }
        });
    }
public Task createFolder(最终字符串folderName,@null最终字符串folderId){
return Tasks.call(mExecutor,new Callable()){
@凌驾
公共GoogleDriveFileHolder调用(){
GoogleDriveFileHolder GoogleDriveFileHolder=新的GoogleDriveFileHolder();
列表根;
if(folderId==null){
root=Collections.singletonList(“根”);
}否则{
root=Collections.singletonList(folderId);
}
文件元数据=新文件()
.setParents(根目录)
.setMimeType(DriveFolder.MIME_类型)
.setName(folderName);
文件googleFile=null;
googleFile=mDriveService.files().create(metadata.execute();
googleDriveFileHolder.setId(googleFile.getId());
返回googleDriveFileHolder;
}
});
}

我尝试使用StackOverflow中可用的各种讨论线程来解决此错误,但没有一个有效,有人能指导我解决此问题吗?

给定一个
android.accounts.Account
,您可以使用,在
GoogleCredential
中设置此令牌,然后将其作为
HttpRequestInitializer
传递给


我会尝试你提出的建议,并向你提供最新信息。
String token = AccountManager.get(context)
    .blockingGetAuthToken(<android.accounts.Account>, "oauth2:" + DriveScopes.DRIVE, false);
GoogleCredential credential = new GoogleCredential().setAccessToken(token);
Drive service = new Drive.Builder(new NetHttpTransport(), new JacksonFactory(), credential)
    .setApplicationName("app name")
    .build();
GoogleAccountCredential credential = GoogleAccountCredential
    .usingOAuth2(context, Collections.singleton(DriveScopes.DRIVE))
    .setSelectedAccount(googleAccount.getAccount());