l oop предназначен для непрерывного получения данных до тех пор, пока не изменится значение базы данных, но предоставление l oop для непрерывного получения данных из Firebase не работает.
Первое, что мы Мне нужно получить текущее местоположение, и это работает отлично.
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
try {
//value of latitude is copied to latit
String latit = dataSnapshot.child("latitude").getValue().toString();
//value of longitude is copied to longi
String longi = dataSnapshot.child("longitude").getValue().toString();
l1 = Double.valueOf(latit);
l2 = Double.valueOf(longi);
Toast.makeText(getApplicationContext(), "lati" + l1 + "and longi" + l2, Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(getApplicationContext(), "error occured", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Database error", Toast.LENGTH_SHORT).show();
}
});
Выполнив этот код, я получил текущие данные из базы данных Firebase в реальном времени
И ниже покажите код, который не работает для me.
while(n==1) {
mDatabase1 = FirebaseDatabase.getInstance().getReference();
mDatabase1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String latit1 = dataSnapshot.child("latitude").getValue().toString();
//value of longitude is copied to longi
String longi1 = dataSnapshot.child("longitude").getValue().toString();
l3 = Double.valueOf(latit1);
l4 = Double.valueOf(longi1);
//the below code is for showing a notification.
здесь l1 и l3 - широта, а l2 и l4 - долгота. l1 и l3 объявлены выше.
if (!(l1.equals(l3) && l2.equals(l4))) {
createChannels();
String title = "Danger";
String content = "Your Vehicle has been moved";
Notification.Builder builder = getEDMTChannelNotification(title, content);
getManager().notify(new Random().nextInt(), builder.build());
n = 0;
//n set to zero and loop exit when notification is shown.
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}