gpt4 book ai didi

java - Firebase addValueEventListener 在其他 Activity 中持续监听

转载 作者:行者123 更新时间:2023-12-01 20:16:03 24 4
gpt4 key购买 nike

我在名为“PrincipalActivity.java”的 Activity 中有此代码

btnSignIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String placa = edtPlaca.getText().toString().trim();
final String token = edtToken.getText().toString().trim();
if (TextUtils.isEmpty(placa)) {
Toast.makeText(getApplicationContext(), "Ingrese una Placa", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(token)) {
Toast.makeText(getApplicationContext(), "Ingrese el Token de Seguridad", Toast.LENGTH_SHORT).show();
return;
}
mapaIntent = new Intent(getApplicationContext(),MapaActivity.class);
startActivity(mapaIntent);
Toast.makeText(getApplicationContext(), "Principal", Toast.LENGTH_SHORT).show();
myRef.child("lineas").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try{
Object valor = "";
String clave = "";
mapaIntent = new Intent(getBaseContext(),MapaActivity.class);
for (DataSnapshot lineas: dataSnapshot.getChildren()) {//navegar por lineas
for (DataSnapshot placas: lineas.getChildren()){//navegar por placas
if (placas.getKey().toString().equals(placa.trim())) {
for (DataSnapshot llave : placas.getChildren()) {//navegar por campos de cada placa
valor = llave.getValue();
clave = llave.getKey();
if (clave.equals("token")) {
if (valor.equals(token.trim())) {
Toast.makeText(getApplicationContext(), "Placa y Token correctos!!!", Toast.LENGTH_SHORT).show();
startActivityForResult(mapaIntent,123);
} else {
Toast.makeText(getApplicationContext(), "Token de Seguridad incorrecto", Toast.LENGTH_SHORT).show();
}
}
}
}
}
Toast.makeText(getApplicationContext(),"La placa no existe",Toast.LENGTH_SHORT).show();

}
}catch (Exception ex){
Toast.makeText(getApplicationContext(),"error leyendo",Toast.LENGTH_SHORT).show();
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

嗯,正如您所看到的,代码是名为 btnSigIn 的按钮监听器的一部分。只需查看 try block ,我正在尝试启动其他名为 MapaActivity 的 Activity 。此外,此 Intent 位于 addValueEventListener 内部(字段更改时的 Firebase 监听器)。

在我的 MapaActivity 类中,我基本上有这个

 class MyLocationListener implements LocationListener {

MyLocationListener(){
ubicacion = new Location("Inicio");
ubicacion.setLatitude(0.0);
ubicacion.setLongitude(0.0);
}

@Override
public void onLocationChanged(Location location) {
if (muestreando){
ubicacion = location;
txtLat.setText("Latitud: "+ location.getLatitude());
txtLon.setText("Longitud: "+ location.getLongitude());
myRef.child("lineas").child("1").child("ABC-123").child("latitud").setValue(location.getLatitude());
myRef.child("lineas").child("1").child("ABC-123").child("longitd").setValue(location.getLongitude());
setResult(1);
}
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

如您所见,这是一个监听器,它修改 Firebase 中用户位置的一些参数。

问题

第一个类工作完美,并将我发送到第二个 Activity (MapaActivity)。

但是,当第二个 Activity 出于任何原因修改 Firebase 数据库时(我无法理解),第一个 Activity 也会监听 Firebase 的更改,并再次创建第二个 Activity 以及如何创建。它会随着位置的变化而发生多次(它刷新 firebase 并且第一个 Activity 监听并再次通过第二个 Activity )。

有人知道为什么吗?我该如何解决。谢谢。

最佳答案

addValueEventListener 不是可以通过单击按钮或其他内容触发的事件。它将始终监听 Firebase 的更改和更新。

addValueEventListener它是一个回调接口(interface),当Firebase数据库发生任何变化时设置。

一旦跳转到另一个 Activity ,就停止监听 EventListener

您有方法removeEventListener,可用于删除lsiteners以避免从firebase获取回调。

dbref.removeEventListener(yourListener);

关于java - Firebase addValueEventListener 在其他 Activity 中持续监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com