一切都很好......直到我从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之前,这很有效.我在另一个模块中的下载任务上遇到了同样的错误.
这是一个截图,让您更好地了解我的情况:
我做了一些合理的研究,找不到我需要的答案.
我所知道的:当我将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)
我认为这足以向您展示我的意思.这就是我的实际代码目前的结构.
问题:
我想这只是计划不周和缺乏知识的结果(我只是为了好玩而不是为了工作而编程)所以如果我必须采取艰难的路线,我想这是一种学习经历,对吧?
我的Android应用程序连接到Firebase并提取由我的服务器发送的"警报对象".
当我从Firebase导出数据时,我得到了一个精美格式化的数据JSON表示.
问题:当我使用DataSnapshot将数据拉到我的Android设备时,数据有'='(等号)而不是':'(分号).报价也不存在.
当我尝试做某些事情时,JSONObject alert = new JSONObject(data.getValue().toString());我会因为明显的原因而出错.我说得很明显,因为如果你看看我的代码打印到控制台的内容,你会发现它不再是有效的JSON格式.
一位朋友提到我需要对编码做一些事情,但我们没有时间讨论它.
我怎样才能通过,我创建了这些(有点奇怪)警报对象进行迭代,并把它们变成JSON对象我的Java之内,这样我可以像访问它们的属性alert.date和alert.message.
我认为截图会帮助你看到我在做什么.firebase完全没有安全保障,所以你可以随意看看它.它不会真正做很多事情,当我去制作时,无论如何我都会移动它.
我确信这是一个非常容易回答的问题,我对JSON和编码整体不太熟悉.
谢谢!
我是编程以及本网站的新手,所以如果我搞砸了,请原谅我.我有一点时间搞清楚如何在这里正确发布我的代码.
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) 好的,我有一个关于同一件事的两部分问题.
我知道至少有四次这样问过,但我的问题略有不同.
问题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进行电子邮件/密码身份验证,但仍然可以保证他们会收到警报.
好的,这个问题太长了,我会在这里停止.先感谢您.
TLDR: 我必须扩展应用程序类,但不知道从哪里开始。
好吧...我知道这是一个愚蠢的但我不得不问它。
我需要安装LeakCanary并且我在他们的文档中看到它要求我将代码放入应用程序类中。
我了解如何创建一个扩展应用程序类的 java 类,但是在我这样做之前我有一些问题。
情况:
问题:
希望我的情况和问题能让您了解我在问什么。
android ×4
firebase ×4
java ×2
encoding ×1
json ×1
memory-leaks ×1
methods ×1
parameters ×1
return-value ×1
void ×1