When I press the back button all the way to Login, the fields show the previous user data inserted

Fábio Duarte :

I'm making an android application on Java. The problem with this app is that when I'm in the main fragment and press the back button, I want it to go back to login (which happens) but the fields of username and password show the data from the last user and I want those fields to show empty like if the app was restarted.

This is my loginuser function inside of my login class.

public void loginUser() {

        String url = MeuSingleton.servidor + "/login";

        loginemail = email.getText().toString().trim();
        loginpass = pass.getText().toString().trim();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            if (response.length() == 9){
                                Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
                                Intent i = new Intent(Login.this, MainActivity.class);
                                startActivity(i);
                            } else {
                                mostrarErro(getString(R.string.tituloerro), getString(R.string.login_errado));
                            }
                        } catch (Exception e) {
                            mostrarErro(getString(R.string.tituloerro), getString(R.string.backenderro));
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mostrarErro(getString(R.string.tituloerro), getString(R.string.interneterro));
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> map = new HashMap<String, String>();
                map.put("email", loginemail);
                map.put("password", loginpass);
                return map;
            }
        };
        MeuSingleton.getInstance(this).addToRequestQueue(stringRequest);
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(350, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    }

And this is my main activity class:

public class MainActivity extends AppCompatActivity implements
        NavigationView.OnNavigationItemSelectedListener{

    MainFragment mainFragment;
    FragmentManager fragmentManager;
    FragmentTransaction fragmentTransaction;
    DrawerLayout drawer;
    NavigationView navigationView;
    ActionBarDrawerToggle toggle;
    Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        navigationView = findViewById(R.id.nested);
        navigationView.setNavigationItemSelectedListener(this);

        drawer = findViewById(R.id.drawer);
        toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.open,R.string.close);
        drawer.addDrawerListener(toggle);
        toggle.setDrawerIndicatorEnabled(true);
        toggle.syncState();

        mainFragment = new MainFragment();
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.fragmentContainer,mainFragment);
        fragmentTransaction.commit();// add the fragment

    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        closeDrawer();
        if(menuItem.getItemId() == R.id.submeteralerta){
            loadFragment(new InsAlertaFragment());
        }
        if(menuItem.getItemId() == R.id.veralertas){
            loadFragment(new SecondFragment());
        }
        if(menuItem.getItemId() == R.id.logout){
            finish();
        }
        if(menuItem.getItemId() == R.id.sobremim){
            loadFragment(new SobreMimFragment());
        }
        if(menuItem.getItemId() == R.id.ajuda){
            loadFragment(new AjudaFragment());
        }
        return true;
    }

    private void loadFragment(Fragment secondFragment) {
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragmentContainer,secondFragment);
        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

    private void closeDrawer() {
        drawer.closeDrawer(GravityCompat.START);
    }
}

And finally my main fragment, which is where I want to press back and go to Login:

public class MainFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main,container,false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }


}

Thanks for the help!

Tyler V :

If you want a Login activity with empty text fields when you go back, you could just clear the text fields out before you launch MainActivity. For example:

Toast.makeText(Login.this, "Login efectuado com sucesso!", Toast.LENGTH_SHORT).show();
email.setText("");
pass.setText("");
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=344894&siteId=1