google drive api示例中的错误

时间:2013-12-02 14:09:22

标签: android google-drive-api

此代码来自谷歌驱动器api示例,我正在尝试实现此代码,但它显示错误在行.....凭据= GoogleAccountCredential.usingOAuth2(this,DriveScopes.DRIVE); ....和给定错误是......在GoogleAccountCredential类型中使用OAuth2(Context,Collection)的方法不适用于参数(MainActivity,String)....如何解决这个错误......

public class MainActivity extends Activity {
static final int REQUEST_ACCOUNT_PICKER = 1;
static final int REQUEST_AUTHORIZATION = 2;
static final int CAPTURE_IMAGE = 3;

private static Uri fileUri;
private static Drive service;
private GoogleAccountCredential credential;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    credential = GoogleAccountCredential.usingOAuth2(this,
            DriveScopes.DRIVE);
    startActivityForResult(credential.newChooseAccountIntent(),
            REQUEST_ACCOUNT_PICKER);
}

@Override
protected void onActivityResult(final int requestCode,
        final int resultCode, final Intent data) {
    switch (requestCode) {
    case REQUEST_ACCOUNT_PICKER:
        if (resultCode == RESULT_OK && data != null
                && data.getExtras() != null) {
            String accountName = data
                    .getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
            if (accountName != null) {
                credential.setSelectedAccountName(accountName);
                service = getDriveService(credential);
                startCameraIntent();
            }
        }
        break;
    case REQUEST_AUTHORIZATION:
        if (resultCode == Activity.RESULT_OK) {
            saveFileToDrive();
        } else {
            startActivityForResult(credential.newChooseAccountIntent(),
                    REQUEST_ACCOUNT_PICKER);
        }
        break;
    case CAPTURE_IMAGE:
        if (resultCode == Activity.RESULT_OK) {
            saveFileToDrive();
        }
    }
}

private void startCameraIntent() {
    String mediaStorageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES).getPath();
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US)
            .format(new Date());
    fileUri = Uri.fromFile(new java.io.File(mediaStorageDir
            + java.io.File.separator + "IMG_" + timeStamp + ".jpg"));

    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(cameraIntent, CAPTURE_IMAGE);
}

private void saveFileToDrive() {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                // File's binary content
                java.io.File fileContent = new java.io.File(fileUri
                        .getPath());
                FileContent mediaContent = new FileContent("image/jpeg",
                        fileContent);

                // File's metadata.
                File body = new File();
                body.setTitle(fileContent.getName());
                body.setMimeType("image/jpeg");

                File file = service.files().insert(body, mediaContent)
                        .execute();
                if (file != null) {
                    showToast("Photo uploaded: " + file.getTitle());
                    startCameraIntent();
                }
            } catch (UserRecoverableAuthIOException e) {
                startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    t.start();
}

private Drive getDriveService(GoogleAccountCredential credential) {
    return new Drive.Builder(AndroidHttp.newCompatibleTransport(),
            new GsonFactory(), credential).build();
}

public void showToast(final String toast) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getApplicationContext(), toast,
                    Toast.LENGTH_SHORT).show();
        }
    });
}

}

2 个答案:

答案 0 :(得分:1)

答案就在问题中。

该方法需要一个Collection对象,但是您传递的是一个简单的String对象。

答案 1 :(得分:0)

这不是唯一的错误。我有一个广泛的必要更改列表和一个工作示例:

https://github.com/hanscappelle/more-android-examples/blob/master/DriveQuickstart/README.md