Ich arbeite an Google Drive API. Ich möchte Bilder von Google Drive herunterladen. Unten ist der Code, der funktioniert, aber die files.open() wird aufgerufen, wenn die Schleife beendet ist. Angenommen, die Zählung ist 3, wird die Schleife zuerst abgeschlossen und danach wird files.open() dreimal aufgerufen. Aus diesem Grund kann ich die Daten in meiner Modellklasse nicht festlegen. Es braucht nur den letzten Wert. (Edited)Ergebnis Rückruf in Schleife (Laden Sie mehrere Bilder von Google Drive.)
if (getGoogleApiClient() != null && getGoogleApiClient().isConnected()) {
try {
final DriveFolder pFldr = Drive.DriveApi.getRootFolder(getGoogleApiClient());
pFldr.listChildren(getGoogleApiClient()).setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
int count = metadataBufferResult.getMetadataBuffer().getCount();
Log.e("COUNT---", count + "");
MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
if (count > 0) {
for (int i = 0; i < count; i++) {
if (buffer.get(i).getMimeType().equals("image/jpeg")) {
Log.e("Images avaialbe - ", "" + buffer.get(i).getTitle());
DriveId id = buffer.get(i).getDriveId();
DriveFile files = Drive.DriveApi.getFile(getGoogleApiClient(), id);
driveModel.setTitle(buffer.get(i).getTitle());
files.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null).setResultCallback(saveImageCallback);
}
if (buffer.get(i).getMimeType().equals("application/x-sqlite3")) {
DriveId id = buffer.get(i).getDriveId();
DriveFile files = Drive.DriveApi.getFile(getGoogleApiClient(), id);
files.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null).setResultCallback(saveDataBaseCallback);
}
}
buffer.release();
showMessage("Success");
} else {
showMessage("No Back Up available.");
}
}
});
} finally {
}
}
ResultCallback<DriveApi.DriveContentsResult> saveImageCallback = new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult driveContentsResult) {
DriveContents cont = driveContentsResult.getDriveContents();
InputStream inputStream = cont.getInputStream();
try {
saveFiles(inputStream, driveModel.getTitle(), false);
cont.discard(getGoogleApiClient());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Wo ist der Haken für die erste 'Versuch-fangen'? –
@ GürtuğGüngör, es ist ein Versuch-endlich, es gibt keinen Haken. –
@ OleV.V., Entschuldigung, ich wurde es versehentlich während der Bearbeitung gelöscht, wenn ich meine bearbeitete Version sehe, habe ich es nicht gesehen und schrieb die Frage. –