Search code examples
javaandroidandroid-studioglobal-variables

Globally Initialized controls turns null in different method


I am declaring few variables at top and those are being initialized in onCreate method, when I am using those in different method those are returning null

code below in always showing "Controls becomes null.." result.

public class MainActivity extends AppCompatActivity
{
    EditText txtUsername,txtPass;
    Button btnLogin;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText txtUsername = (EditText) findViewById(R.id.txtUserName);
        EditText txtPass = (EditText) findViewById(R.id.txtPassword);
        Button btnLogin=(Button)findViewById(R.id.btnLogin);
        txtUsername.setText("Arvind");
        txtPass.setText("1234");

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                doLogin();
            }
        });
    }

    void doLogin()
    {
        if(txtUsername!=null || txtPass!=null) {
            if (txtUsername.getText() != null && txtPass.getText() != null) {
                Toast.makeText(this, "Successfully logged in..", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Username or Password can't be empty..", Toast.LENGTH_SHORT).show();
            }
        }else
        {
            Toast.makeText(this, "Controls becomes null..", Toast.LENGTH_SHORT).show();
        }
    }
}

How can I solve this issue?


Solution

  • You are doing at wrong way, If you are declaring as global variable then why you should again declare new variable in local in onCreate() method

    You have to use same variable as declare global and not to create new one.

    look at this,

    public class MainActivity extends AppCompatActivity
    {
        EditText txtUsername,txtPass;
        Button btnLogin;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            txtUsername = (EditText) findViewById(R.id.txtUserName);
            txtPass = (EditText) findViewById(R.id.txtPassword);
            btnLogin=(Button)findViewById(R.id.btnLogin);
            txtUsername.setText("Arvind");
            txtPass.setText("1234");
    
            btnLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    doLogin();
                }
            });
        }
    
        void doLogin()
        {
            if(txtUsername!=null || txtPass!=null) {
                if (txtUsername.getText() != null && txtPass.getText() != null) {
                    Toast.makeText(this, "Successfully logged in..", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Username or Password can't be empty..", Toast.LENGTH_SHORT).show();
                }
            }else
            {
                Toast.makeText(this, "Controls becomes null..", Toast.LENGTH_SHORT).show();
            }
        }
    }