2016-06-28 50 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中。