Dar*_*ony 2 android android-asynctask google-drive-api
在我的 Android 应用程序中,我可以选择将数据库备份到 Google Drive。为此,我正在使用 DriveServiceHelper 类,但我刚刚注意到,在 Android 11 中,Task.call 已被弃用。
public Task<FileList> queryFiles() {
return Tasks.call(mExecutor, () ->
mDriveService.files().list().setSpaces("drive").execute());
}
Run Code Online (Sandbox Code Playgroud)
从我的 BackupActivity 然后我queryFiles从backup方法调用:
public void backup(View v) {
driveServiceHelper.queryFiles()
.addOnSuccessListener(fileList -> {
// another code
})
.addOnFailureListener(e -> showMsgSnack(getString(R.string.uploaderror)));
Run Code Online (Sandbox Code Playgroud)
我没有找到任何解决方案来处理这个问题以避免该类的完全返工。
我尝试过的:
我尝试替换为可运行的,也可调用的,但它不起作用,因为预期返回任务,而不是文件列表。
我也尝试使用TaskCompletionSource:
public Task<FileList> queryFiles(int delay) throws IOException, ExecutionException, InterruptedException {
new Thread(
new Runnable() {
@Override
public void run() {
TaskCompletionSource<FileList> taskCompletionSource = new TaskCompletionSource<>();
FileList result = null;
try {
result = mDriveService.files().list().setSpaces("drive").execute();
} catch (IOException e) {
e.printStackTrace();
}
FileList finalResult = result;
new Handler().postDelayed(() -> taskCompletionSource.setResult(finalResult), delay);
return taskCompletionSource.getTask();
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
但返回值不适用于 void 类型的方法。
好的,经过几个小时的测试,我尝试了这个解决方案,现在似乎可以工作:(使用 executorService,并且在 Handler 中需要一个 Looper。)
public Task<FileList> queryFiles() {
final TaskCompletionSource<FileList> tcs = new TaskCompletionSource<FileList>();
ExecutorService service = Executors.newFixedThreadPool(1);
service.execute(
new Runnable() {
@Override
public void run() {
FileList result = null;
try {
result = mDriveService.files().list().setSpaces("drive").execute();
} catch (IOException e) {
e.printStackTrace();
}
FileList finalResult = result;
new Handler(Looper.getMainLooper()).postDelayed(() -> tcs.setResult(finalResult), 1000);
}
});
return tcs.getTask();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |