2011-03-28 86 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"); 


    } 
} 
相关问题