我有一个根的两个节点,我想在一个请求中删除它们中的数据.两个子节点具有相同的密钥.我试过这个:
Firebase firebaseRef = new Firebase(<root_path>);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(<path_to_first_node>, key);
childUpdates.put(<path_to_second_node>, key);
listToRemoveRef.updateChildren(childUpdates, null);
Run Code Online (Sandbox Code Playgroud)
但它仅从第一个节点删除了数据
我可以删除未通过身份验证的用户帐户吗?文档提供了这样一种方式:
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.delete()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User account deleted.");
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是删除帐户的唯一方法吗?
我想每天将数据库与服务器数据同步一次,将工作排入队列的最佳位置是什么,因此它每天只运行一次?WorkManager 似乎并不关心下一个入队调用是否在重复间隔内。如果我将排队工作放在 Application 类中,并且该工作已完成,那么如果我关闭并打开应用程序,WorkManager 将再次运行它。
这是否意味着我总是必须在调用之前检查工作是否已排队WorkManager.enqueue()?
val workInfo = workManager.getWorkInfosForUniqueWork("UNIQUE_WORK_NAME").get()?.getOrNull(0)
if (workInfo?.state == WorkInfo.State.ENQUEUED) {
// do nothing
return
}
workManager.enqueueUniquePeriodicWork(
"UNIQUE_WORK_NAME",
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequestBuilder<SyncDbWorker>(
1,
TimeUnit.DAYS
)
.setConstraints(constraints)
.build())
Run Code Online (Sandbox Code Playgroud)
更新:
我忘记提及的一件事是,在我的 Worker 内部我总是返回Result.success()。因此,如果工作由于某种原因失败,WorkManager 将在下一次迭代中重试。
我发现了内存泄漏(使用 LeakCanary),但泄漏跟踪中的代码被混淆了。我对代码混淆没有太多经验,我想知道是否有办法对其进行反混淆,或者是否可以禁用第三个库代码的代码混淆?
我使用的第三个库代码是yandex-ads-sdk。泄漏痕迹:
2020-10-20 12:03:00.931 D/LeakCanary: ?
????
? GC Root: System class
?
?? com.yandex.metrica.impl.ob.dr class
? Leaking: NO (a class is never leaking)
? ? static dr.a
? ~
?? com.yandex.metrica.impl.ob.dr instance
? Leaking: UNKNOWN
? Retaining 125 bytes in 5 objects
? f instance of com.example.Application
? ? dr.h
? ~
?? com.yandex.metrica.impl.ob.bj instance
? Leaking: UNKNOWN
? Retaining 1538 bytes in 60 objects
? q instance of com.example.MainActivity with mDestroyed = false
? a …Run Code Online (Sandbox Code Playgroud) 我尝试使用firebase存储示例应用程序构建存储应用程序,当我拍照时,我总是在onActivityResult(..)中得到RESUL_CANCELED.这是代码:
@AfterPermissionGranted(RC_STORAGE_PERMS)
private void launchCamera() {
Log.d(LOG_TAG, "launchCamera");
// Check that we have permission to read images from external storage.
String perm = Manifest.permission.WRITE_EXTERNAL_STORAGE;
if (!EasyPermissions.hasPermissions(this, perm)) {
EasyPermissions.requestPermissions(this, getString(R.string.rationale_storage),
RC_STORAGE_PERMS, perm);
return;
}
// Choose file storage location, must be listed in res/xml/file_paths.xml
File externalDir = Environment.getExternalStorageDirectory();
File file = new File(externalDir, "photos/" + UUID.randomUUID().toString() + ".jpg");
// Create content:// URI for file, required since Android N
// See: https://developer.android.com/reference/android/support/v4/content/FileProvider.html
mFileUri = FileProvider.getUriForFile(this,
"com.google.firebase.quickstart.firebasestorage.fileprovider", file);
// Create …Run Code Online (Sandbox Code Playgroud)