Как изменить данные в пожарной базе в автономном режиме android? - PullRequest
0 голосов
/ 18 января 2020

Я работаю над модулем чата в моем проекте. Для этого модуля я использую Firebase.

В этом модуле я должен отображать статус пользователя онлайн и оффлайн. Состояние офлайн и онлайн работает во всех сценариях ios, например, когда он закрывает приложение, выходит из приложения и т.д. c.

Но проблема в том, что когда пользователь A общается с пользователем B, если, к сожалению, пользовательское соединение B net было разорвано или в режиме полета, я не могу обновить статус офлайн в firebase. Из-за этого пользователь A по-прежнему видит пользователя B в сети

. Пожалуйста, найдите мой код ниже вместе с моей структурой Firebase:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        boolean connected = snapshot.getValue(Boolean.class);
        if (connected) {
            //System.out.println("connected");
            Map<String, Object> typingKey = new HashMap<>();
            typingKey.put("status", "online");
            mDatabaseReference.child(FirebaseConstants.USERS).child(mFirebaseAuth.getCurrentUser().getUid()).child(FirebaseConstants.PROFILE).updateChildren(typingKey);
            //Toast.makeText(HomeScreenActivity.this, "connect", Toast.LENGTH_LONG).show();
        } else {
             //here if try update data it is getting updated 
            //Toast.makeText(HomeScreenActivity.this, "no connect", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onCancelled(DatabaseError error) {
        System.err.println("Listener was cancelled");
        Toast.makeText(HomeScreenActivity.this, "cancel connect", Toast.LENGTH_LONG).show();
    }
});

fire

1 Ответ

0 голосов
/ 18 января 2020

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

private boolean isNetworkAvailable() {
  ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
  return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}

и добавьте его в свой манифест

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
...