2011-03-28 99 views
1

我對Android開發非常陌生,在這裏面臨一些小問題。 我有一類動物。我需要在兩個活動之間傳遞一個Animal類的數組。我搜索了論壇,發現這可以通過Parceable完成,但我無法完全理解。我嘗試使用Serializable但得到一個例外。 請指導我如何做到這一點?傳遞一組自定義對象+ Android

+1

你有什麼異常? – 2011-03-28 14:12:18

回答

6

推杆:

ArrayList<Animal> animals = new ArrayList<Animal>(); 
//fill your list with animals here 

intent.putExtra("animals", animals); 

檢索:

ArrayList<Animal> animals = (ArrayList<Animal>) getIntent() 
         .getSerializableExtra("animals"); 

你的類Animal應該實現Serializable

編輯: 請注意,這種方法很容易實現,但效率低下。序列化和反序列化對象需要一定的時間,並且在數組規模較大(例如,100多個對象或10多個複雜的重對象)的情況下,可能會導致活動轉換出現明顯的延遲。所以請考慮這種方法是暫時的,不要在生產代碼中使用它。

爲了提高效率,可以使用David Caunt建議的Parcelable。這是一個易於使用的代碼生成器,以避免開發人員編寫樣板代碼:Parcelabler

一個很好的選擇可以是在每個需要它的Activity從本地數據庫獲取和檢索本地SQLite數據庫時存儲數據。因此,您將僅通過意向傳遞Content Url。

2

你應該implement Parcelable然後你可以傳遞你的對象。您基本上添加了幾個方法來將您的對象轉換爲Parcel,反之亦然。

Parcelling與Serialization類似但不相同。把它想象爲重建對象。

有一個例子,你正在試圖做什麼here

1

你的課動物應該實現Serializable。

將數據

ArrayList<Animal> animals = new ArrayList<Animal>(); 

      Intent intent = new Intent(MainActivity.this, 
        AnimalListActivity.class); 

      Bundle bundleObject = new Bundle(); 
      bundleObject.putSerializable("animal", animals); 

      intent.putExtras(bundleObject); 

      startActivity(intent); 

獲取數據

ArrayList<Animal> animals = new ArrayList<Animal>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.animal_activity); 

    Bundle bundleObject = getIntent().getExtras(); 
    animals = (ArrayList<Animal>) bundleObject 
      .getSerializable("animal"); 


    } 
} 
相關問題