繁体   English   中英

注销后出错并尝试在 Firebase DB 上再次登录

[英]Error after logout and try to login again on Firebase DB

我的应用程序运行正常,但如果我注销并尝试再次登录,他就会崩溃。 崩溃后,如果我再次尝试打开应用程序,他会正常打开。

这是错误:

com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.

这是我的课:

DatabaseReference databaseReference;

RecyclerView recyclerView;
ArrayList<Tasks> tasksArrayList;
UsersRecyclerAdapter adapter;

GoogleSignInOptions gso;
GoogleSignInClient gsc;

String userID;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Objects.requireNonNull(getSupportActionBar());

    CheckLogin();

    FirebaseDatabase.getInstance().setPersistenceEnabled(true); // work offline
    databaseReference = FirebaseDatabase.getInstance().getReference();

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    tasksArrayList = new ArrayList<>();



    ReadData();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    if (id == R.id.add) {
        ViewDialogAdd viewDialogAdd = new ViewDialogAdd();
        viewDialogAdd.showDialog(MainActivity.this);
    }else if (id == R.id.logout) {
        gsc.signOut().addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                finish();
            }
        });
    }

    return super.onOptionsItemSelected(item);
}

private void CheckLogin(){
    //Check if user is logged in
    gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    gsc = GoogleSignIn.getClient(this, gso);

    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
    if (account != null){
        userID = account.getId();
    } else {
        Intent i = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(i);
        finish();
    }
}

private void ReadData() {

    if (userID != null) {
        databaseReference.child("DB").child(userID).child("TASKS").orderByChild("id").addValueEventListener(new ValueEventListener() {
            @SuppressLint("NotifyDataSetChanged")
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.exists()) {
                    tasksArrayList.clear();
                    for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                        Tasks users = dataSnapshot.getValue(Tasks.class);
                        tasksArrayList.add(users);
                    }
                    adapter = new UsersRecyclerAdapter(MainActivity.this, tasksArrayList);
                    recyclerView.setAdapter(adapter);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

}

public class ViewDialogAdd {
    public void showDialog(Context context) {
        /*Body*/
    }
}

我试图改变这行代码:

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

我把它放在代码的不同地方,但错误是一样的。 我还尝试删除 CheckLogin(); 但错误仍然存在

昨天我对我的错误进行了一些研究,但一无所获。 今天我做了更多的搜索,这帮助我解决了这个问题。

解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM