![](/img/trans.png)
[英]React Native Firebase logout function doesn't work after login based on user type
[英]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.