使用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