2012-10-08 58 views
4

我需要一點幫助來解決以下問題。GetSerializableExtra返回null

我有兩個活動,A和B.活動A開始B爲結果,B發回A到一個可序列化的對象。

活性的起始活性B:

... 
    Intent intent = new Intent(MainActivity.this, ExpenseActivity.class);  
    startActivityForResult(intent, EXPENSE_RESULT); 
    ... 

活動B將數據發送到:

... 
    ExpensePacket packet = new ExpensePacket(); 
    ... 
    Intent returnIntent = new Intent(); 
    returnIntent.putExtra(MainActivity.PACKET_INTENT,packet); 
    setResult(RESULT_OK,returnIntent);  
    finish(); 

點,其中的活性A獲得從B發送的數據:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == EXPENSE_RESULT) { 
     if(resultCode == RESULT_OK){     
      ExpensePacket result = (ExpensePacket)getIntent().getSerializableExtra(PACKET_INTENT); 

      wallet.Add(result); 
      PopulateList(); 
     } 
     else{ 
      //Write your code otherwise 
     } 
    } 
}  

我的可序列化對象,從B發送到A的那個對象:

class ExpensePacket implements Serializable { 

    private static final long serialVersionUID = 1L;  
    private Calendar calendar; 

    public void SetCalendar(Calendar aCalendar){ 
     calendar = aCalendar; 
    } 

    public Calendar GetCalendar(){ 
     return calendar; 
    } 

    public String GetMonthYear() { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); 
     sdf.format(calendar.getTime());     

     String returnString = ""; 
     returnString += sdf.toString(); 
     returnString += "/"; 
     returnString += Functions.GetMonthName(calendar); 

     return sdf.toString(); 
    } 
} 

有人可以幫我弄清楚爲什麼從B發送給A的數據是空指針。

+0

哪裏顯示數據的代碼是'null'? –

+0

Debbuging the code我注意到方法onActivityResult中的變量結果總是爲空。 –

+0

並且'A'確實被稱爲'MainActivity'?我只是要求確保'onActivityResult()'中的'PACKET_INTENT'與'B'中的'MainActivity.PACKET_INTENT'相同。 –

回答

8

我想我發現你的錯誤:

在您的onActivityResult()方法,你應該使用意向「數據」參數,而不是getIntent()方法。 getIntent()返回用於調用Activity的Intent,而不是由startActivityForResult()調用的Activity返回的Intent。

結果Intent是在onActivityResult()中傳遞的「data」參數。你應該從那裏恢復你的Serializable對象。

我用你的代碼做了一個小項目,可以重現你的問題。用數據參數改變getIntent()解決了這個問題。

還有一件事:我認爲你在ExpensePacket.getMonthYear()中有另一個錯誤,因爲你構造了String的returnString,但是返回了其他的東西。只要檢查一下那部分就可以確定你正在做你想做的事。

+0

+1好的分析和解釋! –

+0

你是對的人。確實是一個很好的分析和解釋。謝謝。 –