从谷歌驱动器中读取android中的App文件夹中的文件

时间:2014-03-27 10:33:00

标签: android google-drive-api

我在Google云端硬盘的App文件夹中创建了一个文件。我想读取我创建的文件。我已经在App文件夹中创建了一些字符串到文件。现在我想知道我怎么做读取在app文件夹中写入该文件的数据。我提到了我在谷歌驱动器上的app文件夹中创建文件的代码。如果有人知道那么请帮助我如何阅读?我搜索了很多,我也看到谷歌的演示,但我不明白。有没有简单的方法来做到这一点?  任何人都可以帮助我,我将非常感谢你。下面的代码是从https://github.com/googledrive/android-demos/blob/master/src/com/google/android/gms/drive/sample/demo/CreateFileInAppFolderActivity.java链接完成的。

 public class Fifth extends BaseDemoActivity {

                    @Override
                    protected void onCreate(Bundle savedInstanceState) {
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_fifth);
                    }

                     @Override
                        public void onConnected(Bundle connectionHint) {
                            super.onConnected(connectionHint);
                            // create new contents resource

                            Drive.DriveApi.newContents(getGoogleApiClient())
                                    .setResultCallback(contentsCallback);
                        }

                        final private ResultCallback<ContentsResult> contentsCallback = new
                                ResultCallback<ContentsResult>() {
                            @Override
                            public void onResult(ContentsResult result) {
                                if (!result.getStatus().isSuccess()) {
                                    showMessage("Error while trying to create new file contents");
                                    return;
                                }
                                // Get an output stream for the contents.
                                OutputStream outputStream = result.getContents().getOutputStream();
                                // Write the bitmap data from it.
                                String data="hello world";
                                 byte[] bytes = data.getBytes();

                              //  ByteArrayOutputStream bitmapStream = new ByteArrayOutputStream();

                         //      image.compress(Bitmap.CompressFormat.PNG, 100, bitmapStream);
                                try {
                                    Log.i("Success", "able to write file contents.");
                                    outputStream.write(bytes);
                                } catch (IOException e1) {
                                    Log.i("Failier", "Unable to write file contents.");
                                }
                                MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                                        .setTitle("appfile.txt")
                                        .setMimeType("text/plain")
                                        .build();

                                Drive.DriveApi.getAppFolder(getGoogleApiClient())
                                        .createFile(getGoogleApiClient(), changeSet, result.getContents())
                                        .setResultCallback(fileCallback);
                            }
                        };

                        final private ResultCallback<DriveFileResult> fileCallback = new
                                ResultCallback<DriveFileResult>() {
                            @Override
                            public void onResult(DriveFileResult result) {
                                if (!result.getStatus().isSuccess()) {
                                    showMessage("Error while trying to create the file");
                                    return;
                                }


                                showMessage("Created a file in App Folder: "
                                        + result.getDriveFile().getDriveId());
                                Log.i("Drioved_ID", ""+result.getDriveFile().getDriveId());
                            }
                        };

                }

2 个答案:

答案 0 :(得分:0)

从app文件夹中读取与阅读任何其他文件没有什么不同。如果您有DriveId,请执行

DriveFile appFolderFile = driveApi.getFile(googleApiClient, driveId);

答案 1 :(得分:0)

首先从应用文件夹中获取所有创建的文件

private void listFiles() {
        Query query =
                new Query.Builder()
                        .addFilter(Filters.or(Filters.eq(SearchableField.MIME_TYPE, "text/html"),
                                Filters.eq(SearchableField.MIME_TYPE, "text/plain")))
                        .build();
        getDriveResourceClient()
                .query(query)

                .addOnSuccessListener(this,

                        new OnSuccessListener<MetadataBuffer>() {
                            @Override
                            public void onSuccess(MetadataBuffer metadataBuffer) {
                                //mResultsAdapter.append(metadataBuffer);

                                for (int i = 0; i <metadataBuffer.getCount() ; i++) {
                                    retrieveContents(metadataBuffer.get(i).getDriveId().asDriveFile());
                                }
                            }
                        }

                )
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e(TAG, "Error retrieving files", e);
                        MainActivity.this.finish();
                    }
                });

    }

第二秒获得内容

 public void retrieveContents(DriveFile file) {

        Task<DriveContents> openFileTask =
                getDriveResourceClient().openFile(file, DriveFile.MODE_READ_ONLY);



        openFileTask.continueWithTask(new Continuation<DriveContents, Task<Void>>() {
            @Override
            public Task<Void> then(@NonNull Task<DriveContents> task) throws Exception {
                DriveContents contents = task.getResult();

                try (BufferedReader reader = new BufferedReader(
                        new InputStreamReader(contents.getInputStream()))) {
                    StringBuilder builder = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line).append("\n");
                    }

                    Log.e("result ", builder.toString());
                }

                Task<Void> discardTask = MainActivity.this.getDriveResourceClient().discardContents(contents);

                return discardTask;
            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });


    }