通过调试,我可以看到它输入了所有这些,但snapshot有一个旧值。我在firebase数据库中启用了持久性。发生了什么?
这是我的工人阶级客栈代码,我在共享首选项中保存了一些数据。但例如,它输入ref1,但snapshot具有旧值。
public class Manager extends Worker {
FirebaseDatabase database = FirebaseDatabase.getInstance();
public Manager(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
ValueEventListener v1, v2, v3;
@NonNull
@Override
public Result doWork() {
boolean flag = getInputData().getBoolean("flag", false);
CountDownLatch latch;
if (isConnectedToWifi() || flag)
latch = new CountDownLatch(3);
else
latch = new CountDownLatch(1);
DatabaseReference ref1 = database.getReference("BASE/previous");
ref1.addValueEventListener(v1 = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
...
}
latch.countDown();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
//
latch.countDown();
}
});
DatabaseReference ref2 = null, ref3 = null;
if (isConnectedToWifi() || flag) {
ref2 = FirebaseDatabase.getInstance().getReference("BASE/syntelestes");
ref2.addValueEventListener(v2 = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
...
}
latch.countDown();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
//
latch.countDown();
}
});
ref3 = FirebaseDatabase.getInstance().getReference("BASE/food_list");
ref3.addValueEventListener(v3 = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()) {
...
}
latch.countDown();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
//
latch.countDown();
}
});
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (v1 != null) {
ref1.removeEventListener(v1);
}
if (v2 != null && ref2 != null) {
ref2.removeEventListener(v2);
}
if (v3 != null && ref3 != null) {
ref3.removeEventListener(v3);
}
return Result.success();
}
public boolean isConnectedToWifi() {
ConnectivityManager connManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return mWifi.isConnected();
}
是否不需要查看细节(数据输入,…,工人内部工作等)。
如果已启用磁盘持久性,并且本地缓存中存储了一个值,则向addValueEventListener
注册的侦听器的onDataChange
将被调用两次:
没有办法改变addValueEventListener
的这种行为。跳过#1
如果您想从服务器获取值,并且仅在服务器不可用时回退到磁盘缓存,请考虑使用更新的get()
操作来执行此操作。
水槽新手。 假设我有一个代理,它有一个 avero 源、一个 hdfs 接收器和一个文件通道。 假设在某个时候接收器无法写入hdfs。源是否会继续接受事件,直到通道填满? 或者即使文件通道未满,源也会停止接受事件吗?
我在使用桌面JavaFX应用程序时,与Oracle数据库的HikariCP连接有问题。 堆栈: 当尝试进行db查询时WiFi互联网连接丢失时,Hikari声明: 在WiFi重新连接后,它不使用相同的连接,Oracle数据库上的会话是活的(没有关闭互联网丢失的原因),但创建新的连接: 所以Hikari创建了新的连接,在Oracle中,我看到了两个相同应用程序的会话。关闭JavaFX应用程序后,第一个
问题内容: 我已经有了这段侦听连接性更改的代码- 我使用此代码检查连接- 但是问题是,如果网络突然失去了互联网连接而没有任何连接更改,则此代码将无用。有什么方法可以创建广播接收器侦听器以更改Internet连接吗?我有一个Web应用程序,突然的Internet连接更改会引起问题。 问题答案: 尝试这个 对于广播接收器 不要忘记将其放入你的AndroidManifest.xml 希望这会为你加油!
我想将我的hsql数据库与eclipse hsql数据库管理器连接到eclipse,我认为代码非常正确,但它给了我这个错误: 线程“main”java.lang.NullPointerException中出现异常:无法调用“java.sql.Connection.CreateStatement()”,因为“this.con”在Peralinq.Main.Main(Main.java:30)的Per
若要使用PS Vita与互联网连接,需先准备无线通信的环境。 若您的住家等地无法通过无线通信,可使用公众无线LAN服务(Hotspot)在公众场所与互联网连接。 公众无线LAN服务的使用方法与费用会因该服务的提供者而异。详细请询问该服务的提供者。 使用Wi-Fi连接 若要使用Wi-Fi与互联网连接,需准备以下内容。此外,接入点的设定通常会通过电脑进行。 与网络服务商签订合约 接入点或无线路由器 接
问题内容: 问题: 当我将作业提交到hadoop 2.2.0集群时,它没有显示在作业跟踪器中, 但是作业成功完成。 这样,我可以看到输出并且它正在正确运行,并在运行时打印输出。 我尝试了多个选项,但作业跟踪器看不到该作业。如果我使用2.2.0 hadoop运行流作业,它将显示在任务跟踪器中,但是当我通过hadoop-client api提交它时,它不会显示在作业跟踪器中。我正在查看端口8088上的