2016-06-28 62 views
-1

得到可变我想用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(); 
    } 
} 
+0

您可以发布完整的堆栈跟踪? – Zoe

+0

在PostEmail活动中,您只需创建一个新的UserEmail对象,并尝试显示电子邮件属性的烘烤,该属性为空。当你调用'startActivity'时,你应该把'PostEmail'活动发送给你已有的'userEmail'对象。 (通过在'UserEmail'类中实现parcelable) –

+0

最后,我找到了正确的解决方案,如果我在UserEmail中将变量放在变量之前,那么它的工作!感谢大家。 – j22purikas

回答

0

那是因为你在初始化你PostEmail活动USEREMAIL对象没有设置其电子邮件的值(比如你在MainActivity做的),所以他的电子邮件字符串为空。

+1

不知道UserEmail对象是男性。 :-) –

+0

哦,谢谢,有点错字:P。 – josemgu91

0

你应该发送 “邮件” 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不是同一个实例。

+0

是的,用这种方式它工作,但如果我不想startActivity,那么我不能使用它。 – j22purikas

+0

@ j22purikas以及你仍然可以使用sharedpreferences共享信息,请查看这篇文章:http://stackoverflow.com/questions/23024831/android-shared-preferences-example – guisantogui

0

josemgu91是正确的。

但它看起来像你想在USEREMAIL一个MainActivity领域或在全球单例类,而不是在clickButton方法。然后,将该字段设置为公共单例或创建一个返回UserEmail var或UserEmail var.getEmail()的getter,或者使用guisantogui的建议并使用intent传递该值,但我会在单独的方法中执行此操作,而不是在cliclListener中。