Android:无法通过get方法获取变量

时间:2016-06-28 19:37:33

标签: java android

我想在我的Android应用中使用set和get方法。 在MainActivity.java中如果我单击按钮我想在UserEmail.java中设置我的电子邮件变量,然后从PostEmail.java获取它并制作吐司。但就这样,我的吐司是空的。如果我将此toast复制到我的MainActivity.java,它的工作。

代码错误

  

在null对象引用上的java.lang.String.length()'

MainActivity.java

public class MainActivity extends AppCompatActivity {

    public void clickButton(View v) {

        String myEmail = "myemail123@gmail.com";

        UserEmail userEmail = new UserEmail();
        userEmail.setEmail(myEmail);
    }
}

UserEmail.java

public class UserEmail {

    public String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

PostEmail.java

public class PostEmail extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        UserEmail userEmail = new UserEmail();
        Toast.makeText(this,userEmail.getEmail(),Toast.LENGTH_LONG).show();
    }
}

3 个答案:

答案 0 :(得分:0)

这是因为您在PostEmail活动中初始化UserEmail对象而未设置其电子邮件值(就像您在MainActivity中所做的那样),因此他的电子邮件字符串为空。

答案 1 :(得分:0)

您应该发送"电子邮件"通过意图,像这样:

public void clickButton(View v) {

    Context context = v.getContext();
    String myEmail = "myemail123@gmail.com";

    Intent i = new Intent(context, PostEmail.class);
    i.putExtra("EMAIL", myEmail );

    startActivity(i);

}

在你的PostEmail活动中,你应该这样做:

protected void onCreate(Bundle savedInstanceState) {
    String email = getIntent().getStringExtra("EMAIL");
    Toast.makeText(this,email,Toast.LENGTH_LONG).show();
}

当您使用UserEmail userEmail = new UserEmail();方法onCreate时,您正在创建一个新的UserEmail实例,这就是为什么您无法收到您之前设置过的电子邮件的原因。< / p>

换句话说,MainActivity中的变量userEmail和PostEmail中的userEmail不是同一个实例。

答案 2 :(得分:0)

josemgu91是正确的。

但看起来你想让UserEmail成为MainActivity或全局单例类中的字段,而不是clickButton方法。然后要么将该字段设为公共单例,要么使getter返回UserEmail var或UserEmail var.getEmail()

或使用guisantogui的建议并使用意图传递值,但我会在单独的方法中进行,而不是在cliclListener中。