Java 循环中的结果回调(从google drive下载多个图像。)
我正在研究谷歌驱动Api。我想从谷歌硬盘下载图片。 下面是正在运行的代码,但循环完成时会调用files.open()。假设计数为3,循环将首先完成循环,然后调用files.open()3次。因此,我无法在模型类中设置数据。它只取最后一个值。(编辑)Java 循环中的结果回调(从google drive下载多个图像。),java,android,callback,google-drive-android-api,Java,Android,Callback,Google Drive Android Api,我正在研究谷歌驱动Api。我想从谷歌硬盘下载图片。 下面是正在运行的代码,但循环完成时会调用files.open()。假设计数为3,循环将首先完成循环,然后调用files.open()3次。因此,我无法在模型类中设置数据。它只取最后一个值。(编辑) if(getGoogleAppClient()!=null&&getGoogleAppClient().isConnected()){ 试一试{ final DriveFolder pFldr=Drive.DriveApi.getRootFolder
if(getGoogleAppClient()!=null&&getGoogleAppClient().isConnected()){
试一试{
final DriveFolder pFldr=Drive.DriveApi.getRootFolder(getGoogleAppClient());
pFldr.listchildrent(getGoogleAppClient()).setResultCallback(new ResultCallback()){
@凌驾
public void onResult(DriveApi.MetadataBufferResult MetadataBufferResult){
int count=metadataBufferResult.getMetadataBuffer().getCount();
Log.e(“COUNT--”,COUNT+”);
MetadataBuffer buffer=metadataBufferResult.getMetadataBuffer();
如果(计数>0){
for(int i=0;i
试试这个:
1.)更改为ArrayList驱动器文件列表代码>
(二)
第一个try catch
的catch在哪里?@GürtuğGüngör,这是一个try finally,没有catch。@OleV.V.,很抱歉,我在编辑时被错误地删除了它,然后当我查看编辑的版本时,我没有看到它,并写下了问题。似乎从来没有catch
,但最后在中编辑的OP。因此,我假设问题中的代码是OK.java.lang.IndexOutOfBoundsException on driveFileList.get(I).getTitle();您将缺少driveFileList.add(driveModel);在你的条件下。。我没有尝试使用application/x-sqlite3语句。如果不想为“application/x-sqlite3”添加文件名,请进行一些验证
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();
}
}
}
}
}
pFldr.listChildren
(getGoogleApiClient())
.setResultCallback(new ResultCallback<DriveApi.MetadataBufferResult>() {
@Override
public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
int count = metadataBufferResult.getMetadataBuffer().getCount();
Log.e("COUNT---", count + "");
Log.e("CHECk" , "Calling callback read from googledrive");
MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
if (count > 0) {
for (int i = 0; i < count; i++) {
final int finalI = i;
Log.e("CHECk" , "reading file " + buffer.get(i).getTitle());
Log.e("Files avaialbe - ", "" + buffer.get(i).getTitle());
driveModel=new DriveModel();
DriveId id = buffer.get(i).getDriveId();
DriveFile files = Drive.DriveApi.getFile(getGoogleApiClient(), id);
if (buffer.get(i).getMimeType().equals("image/jpeg") ||
buffer.get(i).getMimeType().equals("image/png")) {
driveModel.setTitle(buffer.get(i).getTitle());
Log.e("Images avaialbe - ", "" + buffer.get(i).getTitle());
// driveModel.setTitle(buffer.get(i).getTitle());
files.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null)
.setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(@NonNull DriveApi.DriveContentsResult driveContentsResult) {
saveData(driveContentsResult, finalI);
}
});
driveFileList.add(driveModel);
}
if (buffer.get(i).getMimeType().equals("application/x-sqlite3")) {
files.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null)
.setResultCallback(new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(@NonNull DriveApi.DriveContentsResult driveContentsResult) {
saveData(driveContentsResult, finalI);
}
});
}
}
buffer.release();
showMessage("Success");
} else {
showMessage("No Back Up available.");
}
}
}
);
private void saveData(DriveApi.DriveContentsResult driveContentsResult, int i) {
Log.e("CHECk" , "Calling callback " + driveContentsResult.getDriveContents().getDriveId().encodeToString() );
DriveContents cont = driveContentsResult.getDriveContents();
Log.e("File name :" , "File : " + driveFileList.get(i).getTitle());
//Put your code here
InputStream inputStream = cont.getInputStream();
try {
saveFiles(inputStream, true);
cont.discard(getGoogleApiClient());
} catch (IOException e) {
e.printStackTrace();
}
}