使用 Tasks Drive API 检查 requestSync 结果状态

Check requestSync result status with Tasks Drive API

对于之前的 API(使用 PendingResult),我可以做类似的事情:

Drive.DriveApi.requestSync(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
          @Override
          public void onResult(@NonNull Status status) {
            if (status.getStatusCode() == DRIVE_RATE_LIMIT_EXCEEDED) {
              //Here I know Drive rate limit was exceeded.
            }
          }
        });

如何使用新的 TasksAPI 完成相同的操作?

对于我在 documentation 中阅读的内容:

If the request has been rate-limited, the operation will fail with the DRIVE_RATE_LIMIT_EXCEEDED status

但是如何查看 Task<Void> requestSync 的状态?

据我所知:

Task<Void> checkSync = myDriveClient.requestSync();
checkSync.addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
        public void onComplete(@NonNull Task<Void> task) {
            //how do I check the status here?
        }
});

我遇到了同样的问题。其实就是onFailureListener的Exception。 但我需要将其转换为 ApiException。

Task<Void> checkSync = Drive.getDriveClient(getContext(), mGoogleSignInAccount).requestSync();
    checkSync.addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            //how do I check the status here?
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            ApiException apiException = (ApiException) e;
            if (DriveStatusCodes.DRIVE_RATE_LIMIT_EXCEEDED == apiException.getStatusCode()) {
                //Here I know Drive rate limit was exceeded.
            }
        }
    });

希望对您有所帮助。

您可以通过调用 task.isSuccessful() 检查 requestSync 的状态。看来,如果 DRIVE_RATE_LIMIT_EXCEEDED 发生,addOnCompleteListener 无论如何都会首先被调用。

myDriveClient.requestSync()
.addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            Log.i(TAG, "requestSync success");
        } else {
            Log.i(TAG, "requestSync not successful");
        }
    })
    .addOnFailureListener(e -> {
        Log.i(TAG, "requestSync failure");
    });