0

Appfolder のファイルに書き込んだファイルを読みたいのですが、ファイルから読み込もうとするとアプリがクラッシュすることを読み取ることができません。App フォルダーにファイルを正常に作成しました。以下を使用しています。コードなので、私が何か間違っているかどうか教えてください。このコードを実行しているときに発生するエラーは無効なドライブ ID です。

result.getDriveFile().getDriveId().encodeToString()

ここで、result は drivefileresult です。目的を達成するための正しい方法を教えてください。

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. this is sample";
                 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("appdatafolder.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().encodeToString());
            }
        };

}
4

2 に答える 2

3

残念ながら、あなたのコードを分析する時間はありませんが、本質的に同じことを行うセグメントを提供できます。それを試してみてください。

GoogleApiClient gac = getGoogleApiClient();
DriveFolder dfl = Drive.DriveApi.getAppFolder(gac)
String title = "appdatafolder.txt";
String mime = "text/plain";
byte[] buff = ("hello world. this is sample").getBytes();
createFile(gac, dfl, title, mime, buff);

void createFile(final GoogleApiClient gac, final DriveFolder fldr, 
    final String name, final String mime, final byte[] buff) {
  Thread t = new Thread(new Runnable() {
    @Override public void run() {
      try { 
        ContentsResult rslt = Drive.DriveApi.newContents(gac).await();
        if (rslt.getStatus().isSuccess()) {
          Contents cont = rslt.getContents();    
          cont.getOutputStream().write(buff);
          MetadataChangeSet meta = 
              new MetadataChangeSet.Builder().setTitle(name).setMimeType(mime).build();
          DriveFile df = fldr.createFile(gac, meta, cont).await().getDriveFile();
          Log.i("X", ""+ df.getDriveId().encodeToString());
        }
      } catch (Exception e) {}
    }
  });
  t.start();
}

...そして、これを読み返す方法は次のとおりです。

void getFileIs(final GoogleApiClient gac, final DriveId drvId) {
  Thread t = new Thread(new Runnable() {
    @Override public void run() {
      try {
        DriveFile df = Drive.DriveApi.getFile(gac, drvId);
        ContentsResult rslt = df.openContents(gac, DriveFile.MODE_READ_ONLY, null).await();
        if (rslt.getStatus().isSuccess()){
          InputStream is = rslt.getContents().getInputStream();
        }
      } catch (Exception e) {}
    }
  });
  t.start();
}
于 2014-03-30T02:01:10.193 に答える
2

良い例を何日も探した結果、GitHub の Google I/O アプリには、ドライブからファイルを作成、更新、読み取るための優れたユーティリティ メソッドがあることがわかりました。AppFolder も使用します。

于 2016-03-15T12:56:55.637 に答える