作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Android 应用程序中,我可以选择将数据库备份到 Google 云端硬盘。为此,我正在使用 DriveServiceHelper 类,但我刚刚注意到,在 Android 11 中,Task.call 已被弃用。
public Task<FileList> queryFiles() {
return Tasks.call(mExecutor, () ->
mDriveService.files().list().setSpaces("drive").execute());
}
从我的 BackupActivity 然后我从 backup
方法调用 queryFiles
:
public void backup(View v) {
driveServiceHelper.queryFiles()
.addOnSuccessListener(fileList -> {
// another code
})
.addOnFailureListener(e -> showMsgSnack(getString(R.string.uploaderror)));
我没有找到任何解决方案来处理这个问题以避免完全返工该类。
我尝试了什么:
我尝试用可运行的,也可调用的替换,但它不起作用,因为预期返回的是任务,而不是文件列表。
我还尝试使用 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();
}
但返回不是来自 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();
}
关于Android 已弃用 Tasks.call - 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69933562/
我是一名优秀的程序员,十分优秀!