Java 未使用Google Drive API调用onActivityResult

Java 未使用Google Drive API调用onActivityResult,java,android,android-studio,onactivityresult,google-drive-android-api,Java,Android,Android Studio,Onactivityresult,Google Drive Android Api,我正在尝试使用谷歌驱动器API上传一个文件到驱动器。但是,在我下面的代码中我做到了 startActivityForResult(signInIntent, 400); 它永远不会到达onActivityResult,它只是直接转到UploadPffile(),并带有一个空的driveServiceHelper 我已经调查了我在这里发现的一些事情,但这似乎是一个不同的问题?我是Android的初学者,所以也许我忽略了什么?谢谢 @Override protected void onCreate

我正在尝试使用谷歌驱动器API上传一个文件到驱动器。但是,在我下面的代码中我做到了

startActivityForResult(signInIntent, 400);
它永远不会到达onActivityResult,它只是直接转到UploadPffile(),并带有一个空的driveServiceHelper

我已经调查了我在这里发现的一些事情,但这似乎是一个不同的问题?我是Android的初学者,所以也许我忽略了什么?谢谢

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    requestSignIn();
    uploadPdfFile();
} 

private void uploadPdfFile() {
    ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
    progressDialog.setTitle("Uploading to Google Drive");
    progressDialog.setMessage("Please wait...");
    progressDialog.show();

    String filePath = "/storage/emulated/0/mypdf.pdf";
    driveServiceHelper.createFilePDF(filePath)
            .addOnSuccessListener(new OnSuccessListener<String>() {
                @Override
                public void onSuccess(String s) {
                    progressDialog.dismiss();
                    Toast.makeText(getApplicationContext(), "Upload successfully", Toast.LENGTH_LONG).show();
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    progressDialog.dismiss();
                    Toast.makeText(getApplicationContext(), "Check your drive api key", Toast.LENGTH_LONG).show();
                }
            });
}

DriveServiceHelper driveServiceHelper;

private void requestSignIn() {
    GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestScopes(new Scope(DriveScopes.DRIVE_FILE))
            .build();
    GoogleSignInClient client = GoogleSignIn.getClient(this, signInOptions);
    Intent signInIntent = client.getSignInIntent();
    startActivityForResult(signInIntent, 400);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case 400:
            if (resultCode == RESULT_OK) {
                handleSignalInIntent(data);
            }
            break;
    }
}

private void handleSignalInIntent(Intent data) {
    GoogleSignIn.getSignedInAccountFromIntent(data)
            .addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() {
                @Override
                public void onSuccess(GoogleSignInAccount googleSignInAccount) {
                    GoogleAccountCredential credential = GoogleAccountCredential
                            .usingOAuth2(MainActivity.this, Collections.singleton(DriveScopes.DRIVE_FILE));
                    credential.setSelectedAccountName(googleSignInAccount.getAccount().name);
                    Drive googleDriveService = new Drive.Builder(
                            AndroidHttp.newCompatibleTransport(),
                            new GsonFactory(),
                            credential)
                            .setApplicationName("My Drive Tutorial")
                            .build();

                    driveServiceHelper = new DriveServiceHelper(googleDriveService);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                }
            });
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});
请求签名();
UploadPdfile();
} 
私有void uploadPffile(){
ProgressDialog=新建ProgressDialog(MainActivity.this);
progressDialog.setTitle(“上传到谷歌硬盘”);
progressDialog.setMessage(“请稍候…”);
progressDialog.show();
字符串filePath=“/storage/emulated/0/mypdf.pdf”;
driveServiceHelper.createFilePDF(文件路径)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(字符串s){
progressDialog.disclose();
Toast.makeText(getApplicationContext(),“上载成功”,Toast.LENGTH_LONG.show();
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
progressDialog.disclose();
Toast.makeText(getApplicationContext(),“检查驱动器api键”,Toast.LENGTH\u LONG.show();
}
});
}
DriveServiceHelper DriveServiceHelper;
私有无效请求签名(){
GoogleSignenOptions SignenOptions=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestEmail()
.requestScopes(新范围(DriveScopes.DRIVE_文件))
.build();
GoogleSignInClient client=GoogleSignIn.getClient(这是signInOptions);
Intent signinent=client.getsigninent();
startActivityForResult(重要性,400);
}
@凌驾
受保护的void onActivityResult(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
开关(请求代码){
案例400:
if(resultCode==RESULT\u OK){
handleSignalInIntent(数据);
}
打破
}
}
私有void handleSignalInIntent(意图数据){
GoogleSignIn.GetSignedAccountFromIntent(数据)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(GoogleSignInAccount GoogleSignInAccount){
GoogleAccountCredential凭证=GoogleAccountCredential凭证
.usingOAuth2(MainActivity.this、Collections.singleton(DriveScopes.DRIVE_文件));
credential.setSelectedAccountName(googleSignInAccount.getAccount().name);
Drive googleDriveService=新建驱动器.Builder(
AndroidHttp.newCompatibleTransport(),
新的GsonFactory(),
证书)
.setApplicationName(“我的驱动器教程”)
.build();
driveServiceHelper=新的driveServiceHelper(googleDriveService);
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
}
});
}

这几乎是项目中的所有代码。(除DriveServiceHelper之外)

根本原因:

首先调用
requestSignIn
方法。一旦行<代码>开始纠正结果(即400)已执行,
控件转到方法调用。此时,
driveServiceHelper
未初始化


要处理这个问题,在调用
uploadPffile
方法之前,首先必须检查您是否已经登录。如果已经登录,则只调用
uploadPffile
方法。else调用
requestSignIn
方法。 在这一行之后呢

driveServiceHelper = new DriveServiceHelper(googleDriveService); 
uploadPdfFile() 

根本原因:
首先调用
requestSignIn
方法。一旦行<代码>开始纠正结果(即400)已执行,
控件转到方法调用。此时,
driveServiceHelper
未初始化


要处理这个问题,在调用
uploadPffile
方法之前,首先必须检查您是否已经登录。如果已经登录,则只调用
uploadPffile
方法。else调用
requestSignIn
方法。 在这一行之后呢

driveServiceHelper = new DriveServiceHelper(googleDriveService); 
uploadPdfFile() 

super.onActivityResult(请求代码、结果代码、数据)在开关之后ends@javdromero我试过了,但没用。使用调试器,代码永远不会到达“onActivityResult”,根本不会进行调用。一旦线路开始运行,则纠正结果(重要,400);执行后,控件转到UploadPdfile方法调用。此时您的driveServiceHelper尚未初始化。在初始化driveServiceHelper之后,driveServiceHelper()是否必须位于handleSignalInIntent()中?要处理此问题,在调用UploadPffile方法之前,首先必须检查您是否已在singin中。如果你已经签了