Empty file when reading contents - Google Drive API Android -
i´ve read lot google drive api android in last 5 days , didn't find single piece of information use project. i´ve decided come here, hoping of brillant guys me out.
i using android studio 2.1.3 , play-services:9.4.0 , i'm able upload .txt file root folder on google drive without problems. however, when try file content copy .txt, final file turns out empty. tried verify, after query, file's size on metadata buffer , it's empty too. don´t know else do. follow code:
googleapiclient:
api = new googleapiclient.builder(this) .addapi(drive.api) .addscope(drive.scope_appfolder) .addscope(drive.scope_file) .addconnectioncallbacks(this) .addonconnectionfailedlistener(this) .build(); api.connect();
function create files:
public void createfiles() { sendfolder = new file(environment.getexternalstoragedirectory(), "sendtest"); receivefolder = new file(environment.getexternalstoragedirectory(), "receivetest"); if (!sendfolder.exists()) sendfolder.mkdirs(); if (!receivefolder.exists()) receivefolder.mkdirs(); testsend = new file(sendfolder, "test.txt"); fileoutputstream f = null; try { f = new fileoutputstream(testsend); printwriter pw = new printwriter(f); pw.println("test test test test test"); pw.flush(); pw.close(); f.close(); } catch (ioexception e) { e.printstacktrace(); } }
upload file:
public void sendfile() { drive.driveapi.newdrivecontents(api).setresultcallback(backupcontentscallback); } final private resultcallback<driveapi.drivecontentsresult> backupcontentscallback = new resultcallback<driveapi.drivecontentsresult>() { @override public void onresult(driveapi.drivecontentsresult result) { if (!result.getstatus().issuccess()) { return; } metadatachangeset changeset = new metadatachangeset.builder() .settitle("test.txt") // google drive file name .setmimetype("text/plain") .setstarred(true).build(); drive.driveapi.getrootfolder(api) .createfile(api, changeset, result.getdrivecontents()) .setresultcallback(backupfilecallback); } }; final private resultcallback<drivefolder.drivefileresult> backupfilecallback = new resultcallback<drivefolder.drivefileresult>() { @override public void onresult(drivefolder.drivefileresult result) { if (!result.getstatus().issuccess()) { return; } mfile = result.getdrivefile(); mfile.open(api, drivefile.mode_write_only, new drivefile.downloadprogresslistener() { @override public void onprogress(long bytesdownloaded, long bytesexpected) { } }).setresultcallback(backupcontentsopenedcallback); } }; final private resultcallback<driveapi.drivecontentsresult> backupcontentsopenedcallback = new resultcallback<driveapi.drivecontentsresult>() { @override public void onresult(driveapi.drivecontentsresult result) { if (!result.getstatus().issuccess()) { return; } drivecontents contents = result.getdrivecontents(); bufferedoutputstream bos = new bufferedoutputstream(contents.getoutputstream()); byte[] buffer = new byte[1024]; int n; try { fileinputstream = new fileinputstream(testsend.getabsolutefile()); bufferedinputstream bis = new bufferedinputstream(is); while( ( n = bis.read(buffer) ) > 0 ) { bos.write(buffer, 0, n); } bos.close(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } contents.commit(api, null).setresultcallback(new resultcallback<status>() { @override public void onresult(status status) { toast.maketext(getbasecontext(), "uploaded successfully.", toast.length_short).show(); } }); } };
copy file content:
private void receivefilesync() { query query = new query.builder() .addfilter(filters.eq(searchablefield.title, "test.txt")) .build(); drive.driveapi.query(api, query).setresultcallback(new resultcallback<driveapi.metadatabufferresult>() { @override public void onresult(driveapi.metadatabufferresult metadatabufferresult) { long size = metadatabufferresult.getmetadatabuffer().get(0).getfilesize(); showmessage(" size: " + size); driveid = metadatabufferresult.getmetadatabuffer().get(0).getdriveid(); metadatabufferresult.getmetadatabuffer().release(); mfile = driveid.asdrivefile(); mfile.open(api, drivefile.mode_read_only, new drivefile.downloadprogresslistener() { @override public void onprogress(long bytesdown, long bytesexpected) { } }).setresultcallback(restorecontentscallback); } }); } final private resultcallback<driveapi.drivecontentsresult> restorecontentscallback = new resultcallback<driveapi.drivecontentsresult>() { @override public void onresult(driveapi.drivecontentsresult result) { if (!result.getstatus().issuccess()) { return; } testreceive = new file(receivefolder, "test.txt"); drivecontents contents = result.getdrivecontents(); try { bufferedinputstream in = new bufferedinputstream(contents.getinputstream()); fileoutputstream fos = new fileoutputstream(testreceive.getabsolutefile()); bufferedoutputstream bos = new bufferedoutputstream(fos); byte[] buffer = new byte[1024]; int n; while( ( n = in.read(buffer) ) > 0) { bos.write(buffer, 0, n); } bos.close(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } contents.discard(api); } };
the size on showmessage(" size: " + size);
0. think means can´t read. guys know how fix without migrating google rest?
thanks in advance!
Comments
Post a Comment