2014-11-24 160 views
9

我想开发一个android应用程序,可以读取存储在我的谷歌驱动器文件夹中的xml文件,这个想法首先是试图打开文件并处理内容。Google Drive API - Android - 如何获取驱动器文件ID?

我读过Google Drive API docs for android,我达到了我迷路的地步,它正在处理文件内容。

根据这一指导开从驱动器中的文件的方式是这样的:

DriveFile file = ... 
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);` 

搜索我意识到,完整的代码(即它们不包括有):

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,DriveId.bg(id)); 
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallback);` 

好问题在于我不知道文件“id”。我已经尝试从谷歌驱动器的网页链接的id,像这样(https://drive.google.com/openid = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso & authuser = 0),但没有工作。

+0

您可以尝试打开驱动器:

final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new ResultCallback<DriveFolder.DriveFileResult>() { @Override public void onResult(DriveFolder.DriveFileResult result) { if (!result.getStatus().isSuccess()) { Log.e("","Error while trying to create the file"); return; } Id=result.getDriveFile().getDriveId(); Log.e("","Created a file with content: " + Id); } }; 
这个ID的另一种方法,我所说的文件,并读取它(如果我愿意我可以编辑从谷歌驱动的Web应用程序此文件的信息)

然后文件选择器使用newOpenFileActivityBuilder API,允许用户选择一个Drive文件。该API调用的回调将返回所选文件的DriveId,然后您可以像现在一样获取内容。请参阅https://developers.google.com/drive/android/intro#files和https://developers.google.com/drive/android/ – Shailendra 2015-12-06 10:52:03

回答

3

我发现这个问题的解决方案是从应用程序创建文件。使用谷歌驱动api演示程序中的类("CreateFileActivity.java")。

有了这个类,我保存了全局DriveId变量中新文件的返回Driveid。

public void leer(){ 
     DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),Id); 
     file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null) 
       .setResultCallback(contentsOpenedCallback); 
    } 
ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallback = 
     new ResultCallback<DriveApi.DriveContentsResult>() { 
      @Override 
      public void onResult(DriveApi.DriveContentsResult result) { 
       if (!result.getStatus().isSuccess()) { 
        Log.e("Error:","No se puede abrir el archivo o no se encuentra"); 
        return; 
       } 
       // DriveContents object contains pointers 
       // to the actual byte stream 
       DriveContents contents = result.getDriveContents(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream())); 
       StringBuilder builder = new StringBuilder(); 
       String line; 
       try { 
        while ((line = reader.readLine()) != null) { 
         builder.append(line); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       String contentsAsString = builder.toString(); 
       Log.e("RESULT:",contentsAsString); 
      } 
     }; 
+0

上的“打开文件”代码,但是如何编辑其中的内容文件,请你可以发布一些代码? – Achin 2016-06-18 09:50:54

6

您可以使用DriveAPI查询方法来检索有关特定文件的任何信息。您需要定义一个查询对象为以下:

Query query = new Query.Builder() 
    .addFilter(Filters.eq(SearchableField.TITLE, "HelloWorld.java")) 
    .build(); 

,并设置一个回调函数来遍历的结果:

Drive.DriveApi.query(googleApiClient, query) 
     .setResultCallback(new OnChildrenRetrievedCallback() { 

    @Override 
    public void onChildrenRetrieved(MetadataBufferResult result) { 
     // Iterate over the matching Metadata instances in mdResultSet 
    } 
}); 

你可以找到关于该主题在这里更多的信息:https://developers.google.com/drive/android/queries

1

几个月前我一直在玩这个东西,并且在github上仍然有一些代码。它可能是非常过时(libver 15左右),但它可以作为参考点,它是(我希望很简单)。 Look here。把它拉下来,插入,穿过。修复了什么不工作:-)。我前段时间放弃了它。

请注意Google Drive Android API对象有两个不同的ID,请参阅SO 22841237

通常,您通常从知道文件/文件夹名称开始,查询GDAA以获取对象列表。它们中的每一个都将产生DriveID和ResourceID。 DriveID在您的应用程序中用于操纵对象(并不意味着您的Android应用程序和/或设备以外的任何内容)。 ResourceID是在URL中以不同形式出现的字符串,可以在应用程序之外使用(例如Web浏览器)。看看这wrapper有些感觉它是如何工作的。但是,它又回了几个版本,所以没有保证。好运...

相关问题