Я использую сервис для своей работы, и моя цель заключается в том, чтобы мне нужно было загружать все детали с сервера, а когда новая вещь добавляется, изменяется или удаляется, поэтому я использую приведенный ниже код внутри сервиса
Сервисный код
public class ChildEventListenerNew extends Service {
public ChildEventListenerNew() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
Handler handler = new Handler();
int delay = 1000; //milliseconds
DatabaseReference firebaseDatabase;
int ct = 0, ct2 = 0;
boolean internet = false;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("product_table_milla", "onStartCommand " + " is called ct:" + ct);
firebaseDatabase = FirebaseDatabase.getInstance().getReference("product_table");
handler.postDelayed(new Runnable() {
public void run() {
//do something
ct2++;
if (isOnline() && internet == false) {
internet = true;
Log.i("product_table_milla", "handler " + " isonline and internet is false ct:" + ct2);
setLinsier();
} else if (isOnline() == false) {
internet = false;
Log.i("product_table_milla", "handler " + " isoffline and internet is false ct:" + ct2);
}
Log.i("product_table_milla", "handler " + " is called ct:" + ct2);
handler.postDelayed(this, delay);
}
}, delay);
//return super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
ChildEventListener childEventListener = null;
private void setLinsier() {
if (childEventListener != null) {
firebaseDatabase.removeEventListener(childEventListener);
}
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ct++;
if (dataSnapshot != null ? dataSnapshot.getValue() != null ? true : false : false) {
Log.i("product_table_milla", "onChildAdded " + dataSnapshot.getKey() + " " + dataSnapshot.child("p_name").getValue(String.class) + " ct:" + ct);
} else {
Log.i("product_table_milla", "onChildAdded is null");
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ct++;
if (dataSnapshot != null ? dataSnapshot.getValue() != null ? true : false : false) {
Log.i("product_table_milla", "onChildChanged " + dataSnapshot.getKey() + " " + dataSnapshot.child("p_name").getValue(String.class) + " ct:" + ct);
} else {
Log.i("product_table_milla", "onChildChanged is null");
}
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
ct++;
if (dataSnapshot != null ? dataSnapshot.getValue() != null ? true : false : false) {
Log.i("product_table_milla", "onChildRemoved " + dataSnapshot.getKey() + " " + dataSnapshot.child("p_name").getValue(String.class) + " ct:" + ct);
} else {
Log.i("product_table_milla", "onChildRemoved is null ");
}
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
ct++;
if (dataSnapshot != null ? dataSnapshot.getValue() != null ? true : false : false) {
Log.i("product_table_milla", "onChildMoved " + dataSnapshot.getKey() + " " + dataSnapshot.child("p_name").getValue(String.class) + " ct:" + ct);
} else {
Log.i("product_table_milla", "onChildMoved is null");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
ct++;
Log.i("product_table_milla", "onCancelled " + databaseError.getMessage() + "" + " ct:" + ct);
}
};
firebaseDatabase.addChildEventListener(childEventListener);
}
public boolean isOnline() {
ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
return false;
}
return true;
}}
Файл манифеста я добавил этот код
<service android:name=".services.ChildEventListenerNew">
</service>
И в моей основной деятельности
if(isMyServiceRunning(ChildEventListenerNew.class)){
}else {
startService(new Intent(getApplicationContext(),ChildEventListenerNew.class));
}
Все работало нормально, но когда я отключаю подключение к интернету и перезавключить интернет addChildEventListener
не работает.но код "postDelayed" работает, что означает, что после закрытия моего приложения и службы интернет-соединения работает нормально, но firebaseDatabase.addChildEventListener
не отвечает.Я пытаюсь добавлять, изменять и удалять детали в базе данных, но ничего не произошло.Что не так с моим кодом?
Пожалуйста, помогите?
Мне нужно получать все новые добавленные данные и измененные или удаленные данные, когда я использую подключение к Интернету.Возможно ли это с кодом базы данных firebase reailtime?