Android - Firebase - TaskSnapshot - 方法只能在私有范围内访问?
Posted
技术标签:
【中文标题】Android - Firebase - TaskSnapshot - 方法只能在私有范围内访问?【英文标题】:Android - Firebase - TaskSnapshot - Method should only be accessed within private scope? 【发布时间】:2017-04-27 14:21:36 【问题描述】:一切都很好......直到我从 3 个月的假期回来工作并将我的 Firebase 从 9.8 更新到 10.0.1
现在我对TaskSnapshot
的所有调用都给了我一个错误。
这是之前运行良好的示例代码:
OnSuccessListener<UploadTask.TaskSnapshot> successListener = new OnSuccessListener<UploadTask.TaskSnapshot>()
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
attachments.add(fileName + "*-*" + taskSnapshot.getDownloadUrl().toString());
numberOfCallbacks++;
if (numberOfFiles == numberOfCallbacks)
currentUpload = false;
onClickSendAlert(sendingView);
;
我现在得到的错误是关于taskSnapshot.getDownloadUrl()
。
android Studio 用红色下划线表示:
该方法只能从测试或私有范围内访问
有人可以解释为什么会这样吗?我已经连续两天研究了一整天,我这辈子都想不通(尴尬)。
不管怎样,这段代码用于将文件上传到 Firebase 存储,然后当它完成时 (OnSuccess
),它会获取下载 URL 并将其存储在 Firebase 数据库中。这在我更新到 10.0.1 之前效果很好。我在另一个模块中的下载任务中遇到了同样的错误。
这是一个屏幕截图,可以让您更好地了解我的情况:
【问题讨论】:
我应该补充一点,一旦我将 Firebase 和 Google Play 服务改回 9.8.0,所有错误都会消失。 使用Android Studio,当我点击TaskSnapshot.getDownloadUrl()
的出现并按Ctrl-B查看反编译的类文件时,我看到的声明是public android.net.Uri getDownloadUrl()
。你也看到了吗?
我也得到了这个,但我能够构建,所以我不确定为什么它被标记为错误而不是警告。想知道正确的方法是什么。
Firebase 指南甚至在他们的示例中使用了这种方法:firebase.google.com/docs/storage/android/upload-files。一定是疏忽。不是最好的,但是:禁用检查
对我来说这个错误出现在 android studio 2.3 中,在升级之前我使用 10.2.0 没有问题。
【参考方案1】:
这个问题似乎是由过度的 Lint 检查引起的。试试这样的:
@SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl();
这个技巧对我有用。如果问题与this bug report有关,则应该在2.4中修复。
【讨论】:
由于某种原因,这个注释并没有让我的警告消失。 很抱歉听到这个消息!我正在使用带有 Firebase 10.2.0 的 Android Studio 2.3,我只是仔细检查了,当我删除注释时,我可以让警告重新出现,当我放回注释时,警告消失。 如果单击带红色下划线的文本 (getDownloadUrl) 并按 alt-Enter,上下文菜单是否显示“检查‘常量和资源类型不匹配’选项”?或者它是否提到了其他一些检查?如果您单击菜单选项上的向右箭头,它将为您提供更多选项(例如“禁止声明”)以使警告消失(这可能是可取的,也可能不是可取的,具体取决于警告的内容)。 我没有从 alt-Enter 获得那个上下文菜单。但是,我确实通过将注释放在正确的位置来消除错误。我没有把它放在正确的代码块上。 谢谢!我最终从开发中休息了很长时间,以至于当我回来并升级到 10.2.0 时,问题就消失了 :) 我想时间可以治愈一些事情,哈哈。【参考方案2】:我遇到了同样的问题,当我更新我的 Firebase 版本后它就消失了。我使用的是 10.0.1,现在我使用的是 11.0.0
【讨论】:
【参考方案3】:我遇到了同样的问题,并且 suppressWarnings 对我不起作用。 为了获得完整的下载 Uri,我使用了以下代码:
ref.putFile(imagePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>()
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
@Override
public void onSuccess(Uri uri)
Log.d("URL", uri.toString());
// This is the complete uri, you can store it to realtime database
);
);
希望这对某人有所帮助。
【讨论】:
以上是关于Android - Firebase - TaskSnapshot - 方法只能在私有范围内访问?的主要内容,如果未能解决你的问题,请参考以下文章
在 firebase 函数中创建 Google Cloud Task
如何从 Firebase Task<AuthResult> 登录失败中检索错误代码?
Unity C# Firebase:如果“task.Exception.Message”返回“发生了一个或多个错误”并且没有返回数据,我该怎么办?