我使用以下链接使用 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 的初学者。我不明白问题出在哪里?你有什么想法吗?!
提前致谢