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”返回“发生了一个或多个错误”并且没有返回数据,我该怎么办?

将图像从图库上传到 Firebase 存储时应用程序崩溃

android studio:失败:构建失败并出现异常

[Android Pro] Gradle tip #3-Task顺序