使用Google Drive API - 如何在根文件夹中显示文件夹列表

时间:2014-03-19 13:22:55

标签: android google-drive-api

我正在尝试创建Android应用,以便用户可以浏览并从其Google云端硬盘中选择文件。

我是Android新手,我一直在尝试使用这些示例。 当我在手机上运行APK时,身份验证似乎正常,但我不知道如何检索和显示云端硬盘文件夹。

  1. 如何检索它们?
  2. 它们应该在(ListView?)中显示什么,以便用户可以导航到这些文件?
  3. 我的onConnected代码工作正常,但我认为问题是没有正确填充DriveId。

    @Override
        public void onConnected(Bundle connectionHint) {
            Log.i(TAG, "API client connected.");
            super.onCreate(connectionHint);
            setContentView(R.layout.activity_listfiles);
            mResultsListView = (ListView) findViewById(R.id.listViewResults);
            mResultsAdapter = new ResultsAdapter(this);
            mResultsListView.setAdapter(mResultsAdapter);
    
    
            Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FOLDER_ID)
                    .setResultCallback(idCallback);
    
        }
    

    我有一个名为“activity_listfiles.xml”的布局。在那个布局上它只是一个名为:@ id / listViewResults

    的ListView

    代码进入此方法,因为我收到DriveID错误消息:找不到DriveId。您是否有权查看此文件?

    final private ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() {
        @Override
        public void onResult(DriveIdResult result) {
            if (!result.getStatus().isSuccess()) {
                showMessage("Cannot find DriveId. Are you authorized to view this file?");
                return;
            }
            DriveFolder folder = Drive.DriveApi.getFolder(getGoogleApiClient(), result.getDriveId());
            folder.listChildren(getGoogleApiClient())
                    .setResultCallback(metadataResult);
        }
    };
    

    有人能指出我正确的方向吗?我使用以下作为指南: https://github.com/googledrive/android-demos/tree/master/src/com/google/android/gms/drive/sample/demo

    这是ResultsAdapter java文件,我不确定它是做什么的,或者我是否需要更改它:

    public class ResultsAdapter extends DataBufferAdapter<Metadata> {
    
        public ResultsAdapter(Context context) {
            super(context, android.R.layout.simple_list_item_1);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = View.inflate(getContext(),
                        android.R.layout.simple_list_item_1, null);
            }
            Metadata metadata = getItem(position);
            TextView titleTextView =
                    (TextView) convertView.findViewById(android.R.id.text1);
            titleTextView.setText(metadata.getTitle());
            return convertView;
        }
    }
    

    我应该补充一点,字符串EXISTING_FOLDER_ID在BaseActivity.java中,代码行如下所示:

    public static final String EXISTING_FOLDER_ID = "0B2EEtIjPUdX6MERsWlYxN3J6RU0";
    

    我认为我需要以某种方式使用ID来填充它?

    我尝试使用:

        EXISTING_FOLDER_ID =  Drive.DriveApi.getRootFolder(getGoogleApiClient()).getDriveId().toString();
    
        showMessage(EXISTING_FOLDER_ID);
    
       Drive.DriveApi.fetchDriveId(getGoogleApiClient(),EXISTING_FOLDER_ID)
                .setResultCallback(idCallback);
    

    showMessage会显示一个ID - 因此它正在获取根文件夹ID,但由于某种原因它仍显示“无法找到DriveID”消息。

    所以fetchDriveID失败了吗?

1 个答案:

答案 0 :(得分:2)

请在此处查看README的必要性https://github.com/googledrive/android-demos/blob/master/README.md

您需要更改EXISTING_FOLDER_ID以指向您的应用有权访问的云端硬盘文件夹的资源ID。例如,您可以创建一个新文件夹,然后使用该ID。