安卓:不能通过get方法
得到可变我想用set和get在我的Android应用程序的方法。 在MainActivity.java中,如果我单击按钮,我想在UserEmail.java中设置我的电子邮件变量,然后从PostEmail.java中获取它并进行烘烤。但通过这种方式,我的面包是空的。如果我将这个吐司复制到我的MainActivity.java,它的工作。安卓:不能通过get方法
代码错误是
INT java.lang.String.length()”上的空对象引用
MainActivity.java
public class MainActivity extends AppCompatActivity {
public void clickButton(View v) {
String myEmail = "[email protected]";
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();
}
}
那是因为你在初始化你PostEmail活动USEREMAIL对象没有设置其电子邮件的值(比如你在MainActivity做的),所以他的电子邮件字符串为空。
不知道UserEmail对象是男性。 :-) –
哦,谢谢,有点错字:P。 – josemgu91
你应该发送 “邮件” throught的意图,这样的事情:
public void clickButton(View v) {
Context context = v.getContext();
String myEmail = "[email protected]";
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实例的方法,这就是为什么你不能得到你以前设置的电子邮件。
换句话说,来自MainActivity的变量userEmail
和来自PostEmail的userEmail
不是同一个实例。
是的,用这种方式它工作,但如果我不想startActivity,那么我不能使用它。 – j22purikas
@ j22purikas以及你仍然可以使用sharedpreferences共享信息,请查看这篇文章:http://stackoverflow.com/questions/23024831/android-shared-preferences-example – guisantogui
josemgu91是正确的。
但它看起来像你想在USEREMAIL一个MainActivity领域或在全球单例类,而不是在clickButton方法。然后,将该字段设置为公共单例或创建一个返回UserEmail var或UserEmail var.getEmail()的getter,或者使用guisantogui的建议并使用intent传递该值,但我会在单独的方法中执行此操作,而不是在cliclListener中。
您可以发布完整的堆栈跟踪? – Zoe
在PostEmail活动中,您只需创建一个新的UserEmail对象,并尝试显示电子邮件属性的烘烤,该属性为空。当你调用'startActivity'时,你应该把'PostEmail'活动发送给你已有的'userEmail'对象。 (通过在'UserEmail'类中实现parcelable) –
最后,我找到了正确的解决方案,如果我在UserEmail中将变量放在变量之前,那么它的工作!感谢大家。 – j22purikas