2014-03-19 109 views
4

我正在尝试创建一个Android应用程序,以便用户可以从Google Drive中浏览和选择文件。使用Google Drive API - 如何显示根文件夹中的文件夹列表

我完全是Android的新手,我一直在尝试使用这些示例。 当我在手机上运行APK时,身份验证似乎可以正常工作,但我不确定如何检索并显示云端硬盘文件夹。

  1. 它们如何被检索?
  2. 它们应该在(ListView?)中显示什么,以便用户可以导航到文件?

我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”的布局。在该布局上,它只是一个ListView:@ id/listViewResults

代码进入此方法,因为我得到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,但由于某种原因它仍然显示“无法找到驱动器Id”消息。

所以fetchDriveID失败?

回答

2

请在这里看到的README https://github.com/googledrive/android-demos/blob/master/README.md

您需要更改EXISTING_FOLDER_ID指向您的应用程序可以访问驱动器文件夹中的资源ID的需要。例如,您可以创建一个新文件夹,然后使用该ID。

+0

我试过了。我用chrome浏览我的驱动器文件夹,然后从URL中获取文件夹ID。我对这个值进行了硬编码,并且仍然有相同的错误。当然,必须有一种方法来列出用户文件夹? – user3437721

+1

我也试图通过尝试获取根文件夹的ID,如下所示来动态设置值:EXISTING_FOLDER_ID = Drive.DriveApi.getRootFolder(getGoogleApiClient())。getDriveId()。toString(); – user3437721

+0

由于您有“Drive.File”范围,您的应用程序需要有权访问该文件夹才能查看该文件夹。因此,我建议为应用程序创建一个新文件。或者,您可以使用Android OpenFileDialog使用您的应用选择一个文件夹。 –

相关问题