编程语言
首页 > 编程语言> > 使用Java从GoogleDrive获取列表文件

使用Java从GoogleDrive获取列表文件

作者:互联网

我正在开发一个可以登录,下载,上传和显示Google云端硬盘列表文件的应用.

我发现Java代码来自Google Drive SDK,但运行速度很慢,无法正常工作.

我正在阅读solution,但不知道在哪里更改该范围

我的mainActivity:

        // google
        static final int REQUEST_ACCOUNT_PICKER = 1;
        static final int REQUEST_AUTHORIZATION = 2;
        static final int CAPTURE_IMAGE = 3;
        private GoogleAccountCredential credential;
        private static Uri fileUri;
        private static Drive service;

        public void onLoginGoogle(View v) {
                credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
                startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
        }

        public void onUploadGoogle(View v) {
                Thread t = new Thread(new Runnable() {
                        @Override
                        public void run() {
                                try {
                                        // File's binary content
                                        java.io.File fileContent = new java.io.File("/sdcard/a.jpg");
                                        FileContent mediaContent = new FileContent("image/jpeg", fileContent);

                                        // File's metadata.
                                        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
                                        body.setTitle(fileContent.getName());
                                        body.setMimeType("image/jpeg");

                                        com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute();
                                        if (file != null) {
                                                showToast("Photo uploaded: " + file.getTitle());
                                                // startCameraIntent();
                                        }
                                } catch (UserRecoverableAuthIOException e) {
                                        startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                });
                t.start();
        }

        public void onDownloadGoogle(View v) {
                downloadFile();
        }

        private void downloadFile() {
                Thread thread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                try {
                                        com.google.api.services.drive.model.File file = service.files().get("0B-Iak7O9SfIpYk9zTjZvY2xreVU").execute();
                                        // FileList file = service.files().list().execute();
                                        // List<com.google.api.services.drive.model.File> fileList =
                                        // file.getItems();
                                        // com.google.api.services.drive.model.File fileItem =
                                        // fileList.get(0);
                                        // Log.d("FileID" , fileItem.getId());
                                        // Log.d("Count", "Retreived file list");
                                        if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
                                                HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
                                                InputStream inputStream = resp.getContent();
                                                // writeToFile(inputStream);
                                        }
                                } catch (IOException e) {
                                        Log.e("WriteToFile", e.toString());
                                        e.printStackTrace();
                                }
                        }
                });
                thread.start();
        }

        List<File> mGFile;

        public void onListGoogle(View v) {
                AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {

                        @Override
                        protected String doInBackground(Void... arg0) {
                                // TODO Auto-generated method stub
                                try {
                                        mGFile = retrieveAllFiles();
                                        int i = 0;
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                return null;
                        }

                        protected void onPostExecute(String result) {
                                Log.d("Dolphin get glist", String.valueOf(mGFile.size()));
                        };
                };
                task.execute();
                Log.d("Dolphin counting", "aa");
        }

        private List<File> retrieveAllFiles() throws IOException {
                List<File> result = new ArrayList<File>();
                Files.List request = service.files().list();

                do {
                        try {
                                FileList files = request.execute();

                                result.addAll(files.getItems());
                                request.setPageToken(files.getNextPageToken());
                        } catch (IOException e) {
                                System.out.println("An error occurred: " + e);
                                request.setPageToken(null);
                        }
                } while (request.getPageToken() != null && request.getPageToken().length() > 0);

                return result;
        }

        private Drive getDriveService(GoogleAccountCredential credential) {
                return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build();
        }

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                switch (requestCode) {
                case REQUEST_ACCOUNT_PICKER:
                        if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
                                String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                                if (accountName != null) {
                                        credential.setSelectedAccountName(accountName);
                                        service = getDriveService(credential);
                                }
                        }
                        break;
                case REQUEST_AUTHORIZATION:
                        if (resultCode == Activity.RESULT_OK) {
                                // saveFileToDrive();
                                Toast.makeText(this, "Login complete", Toast.LENGTH_SHORT);
                        } else {
                                startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
                        }
                        break;
                }
        }

日志:

"Application name is not set. Call Builder#setApplicationName."

如何从文件夹中获取文件列表?如果有一个可行的例子真棒

解决方法:

这个对我有用:

private List<File> sendRequest(){
    List<File> result = new ArrayList<File>();

    try{
        Files.List request = service.files().list().setQ("trashed = false");

        do{
            try{
                FileList files = request.execute();

                result.addAll(files.getItems());
                request.setPageToken(files.getNextPageToken());
            }
            catch(IOException e){
                System.out.println("An error occurred: " + e);
                request.setPageToken(null);
            }
        }
        while(request.getPageToken() != null
                && request.getPageToken().length() > 0);

    }
    catch(IOException e1){
        e1.printStackTrace();
    }

    for(File file : result){
        Log.d(TAG, "file : " + file.getTitle());
    }
    return result;
}

如果您想要来自特定文件夹的文件,则可以尝试以下请求:

Files.List request = service.files().list().setQ("'" + folderId + "' in parents and trashed = false");

如您所说,它的速度很慢,但是我不知道如何做得更好.

标签:android,java,google-drive-api
来源: https://codeday.me/bug/20191013/1909316.html