小编Rya*_*yan的帖子

Android - Firebase - TaskSnapshot - 方法只能在私有范围内访问?

一切都很好......直到我从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);
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

我现在得到的错误是关于taskSnapshot.getDownloadUrl().

Android Studio强调该行以红色显示:

只能从测试或私有范围访问此方法

有人可以解释为什么会这样吗?我现在已经整天研究了两天,并且不能为我的生活弄清楚这一点(令人尴尬).

对于它的价值,此代码用于将文件上传到Firebase存储,然后在完成(OnSuccess)时,它获取下载URL并将其存储在Firebase数据库中.在我更新到10.0.1之前,这很有效.我在另一个模块中的下载任务上遇到了同样的错误.

这是一个截图,让您更好地了解我的情况:

在此输入图像描述

android firebase firebase-storage

46
推荐指数
2
解决办法
1万
查看次数

Android - Firebase - 我是否需要删除每个单一的监听器?

我做了一些合理的研究,找不到我需要的答案.

我所知道的:当我将ValueEventListener附加到数据库引用时,我知道我需要稍后将其删除(现在发现一些大量的内存泄漏.

我不知道的是:我还需要分离所有其他听众吗?(这包括Firebase数据库,存储和身份验证,我正在使用的三个API)

例:

UploadTask uploadTask = ref.putFile(uploadFile);

uploadTask.addOnFailureListener(new OnFailureListener() {
    //@Override code here
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TakeSnapshot>() {
    //@Override code here
}).addOnProgressListner(new OnProgressListner<UploadTask.TakeSnapshot>() {
    //@Override code here
};
Run Code Online (Sandbox Code Playgroud)

我认为这足以向您展示我的意思.这就是我的实际代码目前的结构.

问题:

  1. 我是否需要删除所有这些侦听器,以防止在回调发生之前终止活动(系统决定,电话死机等)?
  2. 我可以以某种方式将它们捆绑起来并立即终止它们,因为我在我的代码中有30个这样的并且真的不想重构所有这些以便将所有这些侦听器分配给变量JUST所以我可以将它们传递给"removeBlahBlahBlahListener(listenerVariable)"一遍又一遍.
  3. 稍微偏离主题,但是,我懒得将我的所有代码从onCreate移动到onStart ...对于我来说,删除所有这些监听器,完成任务,调用finish()(或者其他任何杀掉的东西都是不好的做法)一个活动,虽然我想这不保证)并且只是从头开始重新创建活动?这是一个简单的小应用程序,因此重新创建活动的开销并不大.只是好奇什么是"正确的".

我想这只是计划不周和缺乏知识的结果(我只是为了好玩而不是为了工作而编程)所以如果我必须采取艰难的路线,我想这是一种学习经历,对吧?

android memory-leaks firebase firebase-storage

7
推荐指数
1
解决办法
2526
查看次数

Android Firebase - 无法从Firebase快照接收正确的JSON

我的Android应用程序连接到Firebase并提取由我的服务器发送的"警报对象".

当我从Firebase导出数据时,我得到了一个精美格式化的数据JSON表示.

问题:当我使用DataSnapshot将数据拉到我的Android设备时,数据有'='(等号)而不是':'(分号).报价也不存在.

当我尝试做某些事情时,JSONObject alert = new JSONObject(data.getValue().toString());我会因为明显的原因而出错.我说得很明显,因为如果你看看我的代码打印到控制台的内容,你会发现它不再是有效的JSON格式.

一位朋友提到我需要对编码做一些事情,但我们没有时间讨论它.

我怎样才能通过,我创建了这些(有点奇怪)警报对象进行迭代,并把它们变成JSON对象我的Java之内,这样我可以像访问它们的属性alert.datealert.message.

我认为截图会帮助你看到我在做什么.firebase完全没有安全保障,所以你可以随意看看它.它不会真正做很多事情,当我去制作时,无论如何我都会移动它.

Firebase截图

直接从Firebase网站导出JSON

Android Studio中的代码将每个对象打印到控制台

运行应用程序时输出到控制台

我确信这是一个非常容易回答的问题,我对JSON和编码整体不太熟悉.

谢谢!

java encoding android json firebase

6
推荐指数
2
解决办法
1万
查看次数

'void'方法何时影响参数,何时影响原始对象?

我是编程以及本网站的新手,所以如果我搞砸了,请原谅我.我有一点时间搞清楚如何在这里正确发布我的代码.

package tester;
import java.util.*;
public class Mainclass2 {
    public static void main(String[] args) {

        int y = 3; 
        int[] x = {1, 2, 3, 4};

        editnumbersArray(x);
        editnumbersNotArray(y);

        System.out.println(x[2]); **//now this was changed from 3 to 9...**
        System.out.println(y);    //but this one went unchanged.

    }

    //this accepts 'x[]' into the 'a[]' parameter.
    public static void editnumbersArray(int[] a){
        a[2] = 9;  **//<---why does this one CHANGE the actual x[2] instead of just a[2]?**
    }

    //this accepts 'y' into the 'a' parameter.
    public …
Run Code Online (Sandbox Code Playgroud)

java parameters methods return-value void

5
推荐指数
1
解决办法
6809
查看次数

Firebase - 我是否应该在特定情况下停止使用匿名身份验证?(另外,如何删除用户)

好的,我有一个关于同一件事的两部分问题.

我知道至少有四次这样问过,但我的问题略有不同.

问题1:

我为我的应用程序使用匿名身份验证(在应用程序安装时使用我的服务器对用户进行身份验证,并且再也不会).匿名身份验证仅在Android设备上完成,因此他们可以访问Firebase数据库和存储.我有经典的"1000+匿名用户"问题,许多人似乎最终结束.(我实际上有22个用户MAX).

可能的解决方案: 我知道你不能批量删除匿名用户,但是,如果我将所有用户ID(全部匿名)复制到一个文件中并将其读入我的node.js服务器,我可以以编程方式登录所有这些用户ID一次又删除它们?此解决方案适用于此次"删除这1000个用户"的问题.在那之后,我到达下一个阻止这种情况再次发生的问题.

问题2:

我使用匿名身份验证的原因是因为这个应用程序是政府办公室的紧急通知应用程序,有22个用户,绝对最大值.这些设备需要不停地监听通知.我使用FCM发送实际警报,但如果用户的电子邮件/密码/ google /任何登录状态进入"已注销"状态,该设备是否仍会收到FCM通知?

我问的原因是,也许我不需要使用匿名auth afterall.我使用它是因为我需要绝对100%确定无论用户做什么(没有安装我的应用程序或没有网络连接)他们都会得到通知.匿名auth允许我保证当他们进入我的应用程序时,他们可以访问数据库.

再说一遍,我想我做错了.

摘要:

我有一个Firebase数据库,用于存储用户发送的"警报对象".用户(最多22个)将这些警报直接从他们的Android设备发送到数据库.我的node.js服务器一直在监听变化.当它看到更改时,它会起作用,然后将FCM通知发送给在该通知上列为收件人的所有用户.在Android方面,这些用户匿名向Firebase数据库进行身份验证.但是,当他们安装应用程序时,他们会输入我在Firebase数据库中预先登录的用户名/密码(使用我制作的前端Web应用程序并在我的nodejs服务器上托管).这种匿名身份验证在我的情况下是否必要,或者我可以让他们使用Firebase进行电子邮件/密码身份验证,但仍然可以保证他们会收到警报.

好的,这个问题太长了,我会在这里停止.先感谢您.

firebase firebase-authentication firebase-cloud-messaging

2
推荐指数
1
解决办法
958
查看次数

Android - 如何为 LeakCanary 扩展应用程序类中间项目

TLDR: 我必须扩展应用程序类,但不知道从哪里开始。

好吧...我知道这是一个愚蠢的但我不得不问它。

我需要安装LeakCanary并且我在他们的文档中看到它要求我将代码放入应用程序类中。

我了解如何创建一个扩展应用程序类的 java 类,但是在我这样做之前我有一些问题。

情况:

  1. 我的应用程序中已经有 9 个课程。
  2. 我的应用程序的入口点是 MainActivity.class(数字,对吧?)
  3. 我还没有扩展应用程序类。
  4. 应用名称是“CST-ALERT”

问题:

  1. 我是否只是在我的 java 源文件夹中创建一个新的 Java 类并将其命名为与我的整体包名称相同的名称?我给这个新班级起什么名字?
  2. 我现在是否需要调整清单以将其作为入口点而不是 MainActivity?我想这会给我带来很大的改变。
  3. 我是否必须更改清单中的其他内容?我想我至少必须在那里声明它。

希望我的情况和问题能让您了解我在问什么。

android

1
推荐指数
1
解决办法
194
查看次数