Firebase onDisconnect и RemovalValue выдают ошибку (Java, Android)

125
02 сентября 2019, 19:00

При нажатии на выход из аккаунта приложение показывает ошибку в строке: currentref.onDisconnect().removeValue();

java.lang.NullPointerException: Attempt to invoke virtual method com.google.android.gms.tasks.Task com.google.firebase.database.DatabaseReference.removeValue()' on a null object reference at com.gulov.map.ListOverflow.onOptionsItemSelected(ListOverflow.java:125)

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewGroup;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class ListOverflow extends AppCompatActivity {
    DatabaseReference onlineRef, currentUserRef, counterRef;
    FirebaseRecyclerAdapter<User, ListOnlineViewHolder> adapter;

    RecyclerView listOnline;
    RecyclerView.LayoutManager  layoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_overflow);

        listOnline = (RecyclerView)findViewById(R.id.listOnline);
        listOnline.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        listOnline.setLayoutManager(layoutManager);

        Toolbar toolbar  = (Toolbar)findViewById(R.id.toolbar);
        toolbar.setTitle("Systeme location");
        setSupportActionBar(toolbar);

        onlineRef = FirebaseDatabase.getInstance().getReference().child(".info/connected");
        counterRef = FirebaseDatabase.getInstance().getReference("lastOnline");
        counterRef = FirebaseDatabase.getInstance().getReference("lastOnline").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
        setUpSysytem();
        updateList();
    }
    private void updateList() {
       adapter = new FirebaseRecyclerAdapter<User, ListOnlineViewHolder>(User.class, R.layout.card_layout, ListOnlineViewHolder.class, counterRef) {
            @Override
            protected void populateViewHolder(ListOnlineViewHolder viewHolder, User model, int position){
                viewHolder.txtEmail.setText(model.getEmail());
            }
        };


        adapter.notifyDataSetChanged();
        listOnline.setAdapter(adapter);
    }
   private void setUpSysytem() {
         onlineRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue(Boolean.class)){
                    currentUserRef.onDisconnect().removeValue();
                    counterRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(new User(FirebaseAuth.getInstance().getCurrentUser().getEmail(), "Online"));
                    adapter.notifyDataSetChanged();
                }


            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        counterRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot postSnapshot:dataSnapshot.getChildren()){
                    User user = postSnapshot.getValue(User.class);
                    Log.d("LOG", "" +user.getEmail()+" is" + user.getStatus());
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_join:
                counterRef = FirebaseDatabase.getInstance().getReference("lastOnline").child(FirebaseAuth.getInstance().getCurrentUser().getUid());
                break;
            case R.id.action_logout:
                currentUserRef.removeValue();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
READ ALSO
Вопрос по Minecraft Protocol

Вопрос по Minecraft Protocol

Тут почитал wikivg/Protocol и попробовал составить простенький сервер

106
rdf4j как преобразовать tuples в json

rdf4j как преобразовать tuples в json

Проблема следующая: При парсинге sparql запроса я получаю упрощённое ast и мне нужно его передать в стороннюю библиотеку для дальнейшей обработки,...

124
Проблема в авторизации яндекс диск с помощью retrofit2

Проблема в авторизации яндекс диск с помощью retrofit2

Изучаю Retrofit2, пытаюсь получить токен Yandex disk, в документации яндекса написано, чтобы получить токен необходимо для начала подтвердить разрешения...

112
Адаптивные ImageView в Android

Адаптивные ImageView в Android

В разметке активити есть область, в которой должны поместиться изображения(от 1 до 10)Соответственно они должны заполнять всю эту область...

113