База данных Firebase в реальном времени addChildEventListener не работает - PullRequest
0 голосов
/ 27 ноября 2018

Я использую сервис для своей работы, и моя цель заключается в том, чтобы мне нужно было загружать все детали с сервера, а когда новая вещь добавляется, изменяется или удаляется, поэтому я использую приведенный ниже код внутри сервиса

Сервисный код

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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...