Java 循环中的结果回调(从google drive下载多个图像。)

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

我正在研究谷歌驱动Api。我想从谷歌硬盘下载图片。 下面是正在运行的代码,但循环完成时会调用files.open()。假设计数为3,循环将首先完成循环,然后调用files.open()3次。因此,我无法在模型类中设置数据。它只取最后一个值。(编辑)

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();
            }
        }