退出后出现错误,尝试在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(真正);

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

昨天我做了一些关于我的错误的研究,没有发现任何东西。今天我做了更多的搜索,这里帮助我解决了这个问题。

解决方案

最新更新