Google 驱动器找不到文件夹或文件
Google Drive can't find folder or files
我的应用程序能够将角色 sheet 保存到 Google 驱动器。它会在该人的 Google 驱动器的根目录上创建一个名为 "SWChars" 的文件夹,然后将文件保存在该文件夹中。每个文件等于一个字符。当下面是 运行 时,它只会找到它创建的文件夹。如果您需要更多上下文,可以在 Github
找到完整的源代码
以下是在 GoogleApiClient 的 onConnected 方法上完成的:
public static void connect(final Activity main){
final DriveFolder root = Drive.DriveApi.getRootFolder(((SWrpg)main.getApplication()).gac);
root.queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWChars")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull final DriveApi.MetadataBufferResult metBufRes) {
if(metBufRes.getStatus().isSuccess()){
final MetadataBuffer metBuf = metBufRes.getMetadataBuffer();
final DriveFolder[] charsFold = {null};
System.out.println("Root List Size: "+String.valueOf(metBuf.getCount()));
for(Metadata met:metBuf){
if(met.isFolder() && !met.isTrashed()){
charsFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(charsFold[0] ==null){
System.out.println("Creating Chars Folder");
root.createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWChars").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
charsFold[0] = driveFolderResult.getDriveFolder();
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()) {
MetadataBuffer metBuffer = metadataBufferResult.getMetadataBuffer();
final DriveFolder[] shipFold = {null};
for (Metadata met:metBuffer){
if(met.isFolder()&&!met.isTrashed()){
shipFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(shipFold[0] ==null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
shipFold[0] = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
((SWrpg)main.getApplication()).vehicFold = shipFold[0];
System.out.println("Done");
}
}
});
}
}
metadataBufferResult.release();
}
});
}
}
});
}else{
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()){
MetadataBuffer mets = metadataBufferResult.getMetadataBuffer();
DriveFolder vehic = null;
for (Metadata met:mets){
if(met.isFolder()&&!met.isTrashed()){
vehic = met.getDriveId().asDriveFolder();
break;
}
}
mets.release();
if(vehic == null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,new MetadataChangeSet.Builder()
.setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
((SWrpg)main.getApplication()).vehicFold = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
});
}else{
((SWrpg)main.getApplication()).vehicFold = vehic;
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
metadataBufferResult.release();
}
});
}
metBufRes.release();
}
}
});
}
抱歉打扰了。
您可能想使用 DriveFolder.listChildren
which will provide the listing of direct children as discussed in working with folders 使用 Google 驱动器 Android API
此外,在Querying for Files、
You can use the com.google.android.gms.drive.query
package to search a user's Drive account for files whose metadata match your search criteria. You can issue a query for a specific folder or on the entire filesystem.
不过,请注意:
The Android Drive API only works with the https://www.googleapis.com/auth/drive.file
scope. This means that only files which a user has opened or created with your application can be matched by a query.
经过几个小时的浏览 Google 搜索了我的问题的不同变体,我终于找到了答案:
使它起作用的主要因素是调用 Drive.DriveApi.requestSync
新代码:
public static void connect(final Activity main){
Drive.DriveApi.requestSync(((SWrpg)main.getApplication()).gac).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if(status.isSuccess()){
final DriveFolder root = Drive.DriveApi.getRootFolder(((SWrpg)main.getApplication()).gac);
root.queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWChars")).setSortOrder(new SortOrder.Builder()
.addSortDescending(SortableField.MODIFIED_DATE).build()).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull final DriveApi.MetadataBufferResult metBufRes) {
if(metBufRes.getStatus().isSuccess()){
final MetadataBuffer metBuf = metBufRes.getMetadataBuffer();
final DriveFolder[] charsFold = {null};
for(Metadata met:metBuf){
if(met.isFolder() && !met.isTrashed()){
charsFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(charsFold[0] ==null){
root.createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWChars").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
charsFold[0] = driveFolderResult.getDriveFolder();
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()) {
MetadataBuffer metBuffer = metadataBufferResult.getMetadataBuffer();
final DriveFolder[] shipFold = {null};
for (Metadata met:metBuffer){
if(met.isFolder()&&!met.isTrashed()){
shipFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(shipFold[0] ==null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
shipFold[0] = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
((SWrpg)main.getApplication()).vehicFold = shipFold[0];
System.out.println("Done");
}
}
});
}
}
metadataBufferResult.release();
}
});
}
}
});
}else{
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()){
MetadataBuffer mets = metadataBufferResult.getMetadataBuffer();
DriveFolder vehic = null;
for (Metadata met:mets){
if(met.isFolder()&&!met.isTrashed()){
vehic = met.getDriveId().asDriveFolder();
break;
}
}
mets.release();
if(vehic == null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,new MetadataChangeSet.Builder()
.setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
((SWrpg)main.getApplication()).vehicFold = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
});
}else{
((SWrpg)main.getApplication()).vehicFold = vehic;
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
metadataBufferResult.release();
}
});
}
metBufRes.release();
}
}
});
}
}
});
}
我的应用程序能够将角色 sheet 保存到 Google 驱动器。它会在该人的 Google 驱动器的根目录上创建一个名为 "SWChars" 的文件夹,然后将文件保存在该文件夹中。每个文件等于一个字符。当下面是 运行 时,它只会找到它创建的文件夹。如果您需要更多上下文,可以在 Github
找到完整的源代码以下是在 GoogleApiClient 的 onConnected 方法上完成的:
public static void connect(final Activity main){
final DriveFolder root = Drive.DriveApi.getRootFolder(((SWrpg)main.getApplication()).gac);
root.queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWChars")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull final DriveApi.MetadataBufferResult metBufRes) {
if(metBufRes.getStatus().isSuccess()){
final MetadataBuffer metBuf = metBufRes.getMetadataBuffer();
final DriveFolder[] charsFold = {null};
System.out.println("Root List Size: "+String.valueOf(metBuf.getCount()));
for(Metadata met:metBuf){
if(met.isFolder() && !met.isTrashed()){
charsFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(charsFold[0] ==null){
System.out.println("Creating Chars Folder");
root.createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWChars").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
charsFold[0] = driveFolderResult.getDriveFolder();
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()) {
MetadataBuffer metBuffer = metadataBufferResult.getMetadataBuffer();
final DriveFolder[] shipFold = {null};
for (Metadata met:metBuffer){
if(met.isFolder()&&!met.isTrashed()){
shipFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(shipFold[0] ==null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
shipFold[0] = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
((SWrpg)main.getApplication()).vehicFold = shipFold[0];
System.out.println("Done");
}
}
});
}
}
metadataBufferResult.release();
}
});
}
}
});
}else{
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()){
MetadataBuffer mets = metadataBufferResult.getMetadataBuffer();
DriveFolder vehic = null;
for (Metadata met:mets){
if(met.isFolder()&&!met.isTrashed()){
vehic = met.getDriveId().asDriveFolder();
break;
}
}
mets.release();
if(vehic == null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,new MetadataChangeSet.Builder()
.setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
((SWrpg)main.getApplication()).vehicFold = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
});
}else{
((SWrpg)main.getApplication()).vehicFold = vehic;
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
metadataBufferResult.release();
}
});
}
metBufRes.release();
}
}
});
}
抱歉打扰了。
您可能想使用 DriveFolder.listChildren
which will provide the listing of direct children as discussed in working with folders 使用 Google 驱动器 Android API
此外,在Querying for Files、
You can use the
com.google.android.gms.drive.query
package to search a user's Drive account for files whose metadata match your search criteria. You can issue a query for a specific folder or on the entire filesystem.
不过,请注意:
The Android Drive API only works with the
https://www.googleapis.com/auth/drive.file
scope. This means that only files which a user has opened or created with your application can be matched by a query.
经过几个小时的浏览 Google 搜索了我的问题的不同变体,我终于找到了答案:
使它起作用的主要因素是调用 Drive.DriveApi.requestSync
新代码:
public static void connect(final Activity main){
Drive.DriveApi.requestSync(((SWrpg)main.getApplication()).gac).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if(status.isSuccess()){
final DriveFolder root = Drive.DriveApi.getRootFolder(((SWrpg)main.getApplication()).gac);
root.queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWChars")).setSortOrder(new SortOrder.Builder()
.addSortDescending(SortableField.MODIFIED_DATE).build()).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull final DriveApi.MetadataBufferResult metBufRes) {
if(metBufRes.getStatus().isSuccess()){
final MetadataBuffer metBuf = metBufRes.getMetadataBuffer();
final DriveFolder[] charsFold = {null};
for(Metadata met:metBuf){
if(met.isFolder() && !met.isTrashed()){
charsFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(charsFold[0] ==null){
root.createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWChars").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
charsFold[0] = driveFolderResult.getDriveFolder();
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()) {
MetadataBuffer metBuffer = metadataBufferResult.getMetadataBuffer();
final DriveFolder[] shipFold = {null};
for (Metadata met:metBuffer){
if(met.isFolder()&&!met.isTrashed()){
shipFold[0] = met.getDriveId().asDriveFolder();
break;
}
}
metBuf.release();
if(shipFold[0] ==null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,
new MetadataChangeSet.Builder().setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
shipFold[0] = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
((SWrpg)main.getApplication()).vehicFold = shipFold[0];
System.out.println("Done");
}
}
});
}
}
metadataBufferResult.release();
}
});
}
}
});
}else{
charsFold[0].queryChildren(((SWrpg)main.getApplication()).gac,new Query.Builder()
.addFilter(Filters.eq(SearchableField.TITLE,"SWShips")).build())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(@NonNull DriveApi.MetadataBufferResult metadataBufferResult) {
if(metadataBufferResult.getStatus().isSuccess()){
MetadataBuffer mets = metadataBufferResult.getMetadataBuffer();
DriveFolder vehic = null;
for (Metadata met:mets){
if(met.isFolder()&&!met.isTrashed()){
vehic = met.getDriveId().asDriveFolder();
break;
}
}
mets.release();
if(vehic == null){
charsFold[0].createFolder(((SWrpg)main.getApplication()).gac,new MetadataChangeSet.Builder()
.setTitle("SWShips").build())
.setResultCallback(new ResultCallback<DriveFolder.DriveFolderResult>() {
@Override
public void onResult(@NonNull DriveFolder.DriveFolderResult driveFolderResult) {
if(driveFolderResult.getStatus().isSuccess()){
((SWrpg)main.getApplication()).vehicFold = driveFolderResult.getDriveFolder();
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
});
}else{
((SWrpg)main.getApplication()).vehicFold = vehic;
((SWrpg)main.getApplication()).charsFold = charsFold[0];
}
}
metadataBufferResult.release();
}
});
}
metBufRes.release();
}
}
});
}
}
});
}