首页 > 解决方案 > 全局初始化的控件以不同的方法变为空

问题描述

我在顶部声明了几个变量,并且这些变量在onCreate方法中被初始化,当我在不同的方法中使用那些正在返回的变量时null

下面的代码始终显示“控件变为空..”结果。

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();
        }
    }
}

我该如何解决这个问题?

标签: javaandroidandroid-studioglobal-variables

解决方案


你做错了,如果你声明为全局变量,那么为什么你应该再次在本地onCreate()方法中声明新变量

您必须使用与声明全局相同的变量,而不是创建新变量。

看这个,

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();
        }
    }
}

推荐阅读