2014-03-28 2 views
0

나는 내가 File.i에서 읽으려고 할 때 내 app이 충돌이 있다는 것을 읽을 수 없다고 Appfolder.but에있는 파일에 기록한 것을 읽고 싶습니다. App 폴더는 성공적으로 .i 아래 코드를 사용하고 있으므로이 코드를 실행하는 동안 오류가 발생합니다.이 드라이브 ID는 잘못된 드라이브 ID입니다.android에서 AppFolder 파일 데이터 읽기

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

} 

답변

3

불행히도 나는 코드를 분석 할 시간이 없지만 본질적으로 동일한 세그먼트를 제공 할 수 있습니다. 시도 해봐.

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

'run() {}'에서 제거하고 'await()'메서드를 async 'content result callback'으로 대체하면 여기의 코드를 쉽게 비동기 버전으로 만들 수 있습니다. – seanpj

2

좋은 예를 들어 검색의 일 후에, 나는 Google I/O app on GitHub 발견 생성, 갱신 및 파일을 읽을 수있는 우수한 유틸리티 메소드가 여기

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

... 그리고 당신이 그것을 다시 읽어 방법입니다 드라이브에서. 그들은 AppFolder도 사용합니다.

관련 문제