我正在尝试开发一个可以读取存储在我的google驱动器文件夹中的xml文件的Android应用程序,首先想法是尝试打开文件并处理内容。
我已经阅读了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/open? id = 1EafJ-T6H4xI9VaUuUO5FMVb9Y30xyr7OHuISQ53avso & authuser = 0)但是没有用。
答案 0 :(得分:7)
您可以使用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 :(得分:3)
我发现此问题的解决方案是从应用程序创建文件。使用google drive api demo app中的类("CreateFileActivity.java")。
使用此类,我将新文件中的返回Driveid保存在全局DriveId变量中。
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我调用该文件并将其读取(如果我想我可以从Google Drive Web App编辑此文件信息):
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);
}
};
答案 2 :(得分:1)
请注意,Google Drive Android API对象有2个不同的ID,请参阅SO 22841237。
通常,您通常从了解文件/文件夹名称开始,查询GDAA以获取对象列表。它们中的每一个都将产生DriveID和ResourceID。您的应用中使用DriveID来操纵对象(并不意味着Android应用和/或设备之外的任何内容)。 ResourceID是在URL中以不同形式出现的字符串,可以在应用程序外部使用(例如Web浏览器......)。看看这个wrapper以了解它是如何工作的。但同样,它还有几个版本,所以没有保证。祝你好运......
答案 3 :(得分:0)
已弃用Google Drive API,现在使用其Google Drive V3,我们使用Query
String pageToken = null;
do {
FileList result = driveService.files().list()
.setQ("mimeType='image/jpeg'")
.setSpaces("drive")
.setFields("nextPageToken, files(id, name)")
.setPageToken(pageToken)
.execute();
for (File file : result.getFiles()) {
System.out.printf("Found file: %s (%s)\n",
file.getName(), file.getId());
}
pageToken = result.getNextPageToken();
}
while (pageToken != null);
您可以在Officals Docs
了解更多信息