单击按钮后不调用 onActivityResult(使用 Google Drive API)

问题描述 投票:0回答:0

我使用以下链接使用 Google Drive API 将文件上传到云端硬盘: https://www.youtube.com/watch?v=rznYp43KLRc

当我在 onCreate 中调用 requestSignIn() 时,它工作正常。但是当我在setOnClickListener中调用它时,它不起作用!

我的代码是这样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // When I call requestSignIn here it works correctly 
    // requestSignIn();
}

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);
    startActivityForResult(client.getSignInIntent(), 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)
            {
                handleSignInIntent(data);
            }
    }
}

private void handleSignInIntent(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.setSelectedAccount(googleSignInAccount.getAccount());

                    Drive googleDriveService= new Drive.Builder(
                            AndroidHttp.newCompatibleTransport(),
                            new GsonFactory(),
                            credential)
                            .setApplicationName("My Drive Totorial")
                            .build();
                    driveServiceHelper = new DriveServiceHelper(googleDriveService);



                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });
}

public void uploadPdfFile(View v)
{
    String filepath= "/storage/emulated/0/mypdf.pdf";
    driveServiceHelper.createFilePDF(filepath).addOnSuccessListener(new OnSuccessListener<String>() {
        @Override
        public void onSuccess(String s) {
            Toast.makeText(MainActivity.this, "Upload successfully", Toast.LENGTH_SHORT).show();


        }
    })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(MainActivity.this, "Check Your google drive api key", Toast.LENGTH_SHORT).show();

                }
            });

}
btnSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            
            if (signatureView.isBitmapEmpty()) {
                Toast.makeText(getApplicationContext(), "Bitte unterschreiben", Toast.LENGTH_SHORT).show();
            }
            else {
                
                // I want to sign in to Google Drive now 
                 requestSignIn(); // but it doesn't work!
            }
        }
    });

我想要的是“活动正在加载”时“登录客户端”不应该是可能的,但只有在点击“提交”后才可能。

当我调试代码时,requestSignIn() 被正确调用,但是 onActivityResult 没有被正确调用。

在我下面的代码中,完成后

startActivityForResult(client.getSignInIntent(), 400)

它永远不会到达 onActivityResult.

我是 Android 的初学者。我不明白问题出在哪里?你有什么想法吗?!

提前致谢

java android google-drive-api onactivityresult startactivityforresult
© www.soinside.com 2019 - 2024. All rights reserved.