android 编辑直接作为参数传递给对象函数或构造函数的文本值不起作用

android edit text value passed directly as parameter to object functions or constructors not working

下面是class代码:

public class UserInfo 
{
    String userName;
    String userPass;

    public UserInfo(){

    }
    public UserInfo(String userName, String userPass){
        userName=this.userName;
        userPass=this.userPass;
    }
    public void setUserName(String userName){
        userName=this.userName;
    }
    public void setUserPass(String userPass){
         userPass=this.userPass;
    }
}

如果我将字符串从 activity 传递给对象函数,如下所示:userInfo.setUserName(et_login_user_name.getText().toString());

那么用户名没有设置为编辑框的值。它被设置为空。

但是如果我设置值如下: userInfo.userName=et_login_user_name.getText().toString();

然后代码可以正常工作。

下面是activityclass代码:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    final Context ctx=this;

    final Button bt_login=(Button)findViewById(R.id.button5);
    bt_login.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            UserInfo userInfo = new UserInfo();
            EditText et_login_user_name=(EditText)findViewById(R.id.editText);
            EditText et_login_user_pass=(EditText)findViewById(R.id.editText2);
//   userInfo.setUserName(et_login_user_name.getText().toString()); -not working 
//   userInfo.setUserPass(et_login_user_pass.getText().toString()); -not working

            userInfo.userName=et_login_user_name.getText().toString();  // working
            userInfo.userPass=et_login_user_pass.getText().toString();  // working
            if(userInfo.userPass.isEmpty()||userInfo.userName.isEmpty()) //get null pointer exception for non working code
            {
              //some code
            }

您分配的值不正确,您没有将值分配给 class 成员,而是将 class 成员值分配给传递的参数。即代替 用户名 = this.userName 使用

this.userName = 用户名;

使用这个,您可以从 class 变量中为局部函数变量赋值。下面的代码现在适合你

public class UserInfo 
{
    String userName;
    String userPass;

    public UserInfo(){

    }
    public UserInfo(String userName, String userPass){
        userName=this.userName;
        userPass=this.userPass;
    }
    public void setUserName(String userName){
        this.userName=userName;
    }
    public void setUserPass(String userPass){
         this.userPass=userPass;
    }
}

this.userName指向那个class的局部变量userName不是接收到的参数。

最初这些都是空的,

String userName;
String userPass;

这里是你出错的地方。

 public void setUserName(String userName){
        userName=this.userName; // assume userName u passed was admin, then, admin = userName where userName is empty which causes null pointer exception
    }

所以,应该是

public void setUserName(String userName){
        this.userName=userName; //in this case userName = admin;
    }

您还需要为 class 中的整个事物更改相同的分配事物。所以,class 的最终代码应该是

public class UserInfo 
{
    String userName;
    String userPass;

    public UserInfo(){

    }
    public UserInfo(String userName, String userPass){
        this.userName= userName;
        this.userPass =  userPass;
    }
    public void setUserName(String userName){
        this.userName= userName;
    }
    public void setUserPass(String userPass){
        this.userPass =  userPass;
    }
}