I am working on Google Drive Api. I want to download images from Google drive. Below is the code which is working but the files.open() is called when the loop finishes. Suppose the count is 3, the loop will complete looping first and after that files.open() will be called 3 times. Because of this I am not able to set the data in my model class. It takes only last value. (Edited)
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();
}
}
}
}
}
Try this: 1.) Change to
ArrayList<DriveModel> driveFileList;
2.)3.) create the method :