Uz dlho sa s tym trapim a neviem si rady. V mojej android apke pouzivam zalohu databazy do Google Drive. V hlavnej klase mam napr. obnovu dat z drive:
Kód:
public void restore(View v) {
AtomicInteger count = new AtomicInteger(1);
driveServiceHelper.queryFiles()
.addOnSuccessListener(fileList -> {
// ...
})
.addOnFailureListener(e -> showMsgSnack(getString(R.string.nobackupyet)));
}
no a potom mam DriveServiceHelper class, kde mam samotny upload alebo download, ale aj ziskanie zoznamu suborov z Drive - queryFiles(), ktory je volany z hlavnej klasy, vid kod vyssie.
Kód:
public Task<FileList> queryFiles() {
return Tasks.call(mExecutor, () ->
mDriveService.files().list().setSpaces("drive").execute());
}
Problem je, ze
Tasks.call je uz deprecated, zatial sice este funguje, ale rad by som to nahradil.
Skusal som to s Callable, ale toto vobec nefunguje, potrebujem nejakym sposobom returnovat Task mDriveService.files().list().setSpaces("drive").execute(), ale neviem akym sposobom.
Kód:
public Task<FileList> queryFiles() throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Task<FileList>> callable = new Callable<Task<FileList>>() {
@Override
public Task<FileList> call() throws IOException {
mDriveService.files().list().setSpaces("drive").execute();
}
};
Future<Task<FileList>> future = executor.submit(callable);
return future.get();
executor.shutdown();
}