Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
71 views
in Technique[技术] by (71.8m points)

java - How could I clean TextView after logout?

I have an issue with my android app. The user info in the TextView of my DrawerLayout will not updated but remain those of the last registration. How can I delete them after logging out? I try with this but it doesn't work:

public class MenuActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private ImageView imageProfile;
    private TextView mUsername;
    private TextView mEmail;
    private DrawerLayout drawer;
    private NavigationView navigationView;

    private static final int GALLERY_REQUEST_CODE_PERMISSION = 1000;

    //Firebase stuff
    private StorageReference storageReference;
    private FirebaseFirestore mStore;
    private FirebaseAuth mAuth;
    private FirebaseDatabase database;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
        setupUIMenu();

        String email = getIntent().getStringExtra("user_email");

        mUsername.setText("");
        mEmail.setText("");

        mAuth = FirebaseAuth.getInstance();
        mStore = FirebaseFirestore.getInstance();
        storageReference = FirebaseStorage.getInstance().getReference();

        imageProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent openGalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(openGalleryIntent, GALLERY_REQUEST_CODE_PERMISSION);
            }
        });


        DatabaseReference database = FirebaseDatabase.getInstance().getReference();
        DatabaseReference databaseUsers = database.child("users");

        Query usersQuery = databaseUsers.orderByChild("email").equalTo(email);
        usersQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                try {
                    User user = snapshot.getValue(User.class);

                    mUsername.setText(user.getUserName());
                    mEmail.setText(user.getEmail());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });

if(savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new MenuFragment()).commit();
            navigationView.setCheckedItem(R.id.nav_menu);
        }

private void setupUIMenu() {
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open,
                R.string.navigation_drawer_close);

        drawer.setDrawerListener(toggle);
        toggle.syncState();

        navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        View navHeaderView = navigationView.getHeaderView(0);

        imageProfile = navHeaderView.findViewById(R.id.imageProfile);
        mUsername = navHeaderView.findViewById(R.id.userName_nav);
        mEmail = navHeaderView.findViewById(R.id.userEmail_nav);
    }

    @Override
    public void onBackPressed() {
        if(drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()) {

            case R.id.nav_menu:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new MenuFragment()).commit();
                break;
            case R.id.nav_profile:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new ProfileFragment()).commit();
                break;
            case R.id.nav_send:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SendFragment()).commit();
                break;
            case R.id.nav_settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new SettingsFragment()).commit();
                break;
            case R.id.nav_logout:
                logout(item);
        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    public void logout(MenuItem item) {
        FirebaseAuth.getInstance().signOut();
        Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
        //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

I added my whole MenuActivity.java but username and email still remain void. I don't know why.

enter image description here

question from:https://stackoverflow.com/questions/65647756/how-could-i-clean-textview-after-logout

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Okay, let's do it step by step. First on your LoginActivity where your user logins and enters email use .putExtra() on Intent to provide that email to your MainActivity that starts after. Do it like this:

Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("user_email", email.getText().toString());
startActivity(intent);
finish();

Then to get this value in MainActivity copy this in onCreate:

String email = getIntent().getStringExtra("user_email");

After that call this to retrieve user from Firebase database:

DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference databaseUsers = database.child("users");

Query usersQuery = databaseUsers.orderByChild("email").equalTo(email);
usersQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
       try {
            User user = snapshot.getValue(User.class);

            mUsername.setText(user.getName());
            mEmail.setText(user.getEmail());
        } catch (Exception e) {
            e.printStackTrace();
       }
    }
    @Override
    public void onCancelled(@NonNull DatabaseError error) {
    }
});

This will set text to your DrawerLayout username and email TextView.

And your User.java looks like this:

@IgnoreExtraProperties
public class User {
    private String email;
    private String password;
    private String uid;
    private String userName;

    public User () {
             //Default constructor required for calls to DataSnapshot.getValue(User.class)
    }

    public String getName() { return userName };
    public String email() { return email };
}

This should work now. Let me know how it goes.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...