2015-06-20 62 views
2

我有一個複雜的對象(其中包含更多對象和hashmaps)。所有對象都實現了Serializable將可序列化對象傳遞給活動時出現無效轉換

在第一個活動我做的:

public void secondActivity(MyObject o) { 
    Intent intent = new Intent(this, SecondActivity.class); 
    intent.putExtra("myobject", o); 

    startActivity(intent); 
    finish(); 
} 

然後,在第二個活動我做:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent intent = getIntent(); 
    MyObject o = (MyObject)intent.getSerializableExtra("myobject"); 
} 

但投放時,我得到這個異常:

java.lang.ClassCastException:java.util.ArrayList不能轉換爲myapp.MyObject

這是在活動之間傳遞複雜對象的正確方法嗎?我錯過了什麼?

或者我應該實現單例類嗎?

+0

'getIntent()'返回的是'myobject'額外添加的相同意圖嗎? – CKing

+0

@ChetanKinger它應該。應用程序中沒有其他地方可以打開第二個活動。 –

回答

1

你正在做的都很好,所以我認爲可能是:

  • 您要發送到secondActivity方法的不正確的對象(如ArrayList,而不是正確的MyObject的)
  • 請看,如果你正在使用這個關鍵字「myobject」在代碼的其他部分,並在putExtra中設置其他對象。

  • 驗證的MyObject類看,如果一些變量是一個ArrayList和刪除它(只是爲了測試)

  • 您的自定義對象沒有「實現Serializable」,如:

    公共類MyObject來實現Serializable {

    //變量和方法

    }

所以,我建議你驗證一下,我認爲最好使用Singleton類或Parcelable而不是Serializable,因爲Google說根據Good Practice更好。 請看看這個答案stackoverflow

我做了一些應用程序,並實現序列化,我的自定義對象是:

public class Stores implements Serializable { 
private static final long serialVersionUID = 1L; 
public Integer id; 
public String name; 
public String store_hours; 
public String telephone; 
public String fax; 
public String latitude; 
public String longitude; 

}

我firt活動:

private void showDialog(Stores store) 
    { 
     Intent intent = new Intent(this,DisplayDialogActivity.class); 
     intent.putExtra("Locations",store); 
     startActivityForResult(intent, 0); 
    } 

我的第二個活動

Stores store = (Stores) getIntent().getSerializableExtra("Locations"); 

PD:我不太會說英語,所以對此表示歉意。

0
  • 有一些普遍準則,爲什麼有些對象是不是 序列化

  • 實在是太緊密聯繫在一起的本地代碼(java.util.zip.Deflater中)。

  • 該對象的狀態取決於虛擬機或 運行時環境的內部,並且因此可以從運行切換到運行
    (java.lang.Thread中,java.io.InputStream中,java.io.FileDescriptor中,
    java.awt.PrintJob)。

  • 該類主要是一個靜態方法的持有者,沒有任何實際的內部狀態(java.beans.Beans,java.lang.Math) 。

  • 該類是非靜態的內部類。序列化不能正常工作 以及非靜態內部類。 (靜態內部類沒有 問題被序列化。)

  • 備用序列化格式在特定的 上下文中是首選。 (XOM節點類不能序列化,因爲XML的正確 序列化格式爲XML)。

確保您的類被聲明爲公共

完整的參考。 Java I/O 2nd Edition

相關問題