2010-02-12 65 views

回答

24

可以调用startService(意向)是这样的:

MyObject obj = new MyObject(); 
Intent intent = new Intent(this, MyService.class); 
intent.putExtra("object", obj); 
startService(intent); 

要发送必须实现Parcelable对象(可以参考这个Percelable guide

class MyObject extends Object implements Parcelable { 

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     // TODO Auto-generated method stub 

    } 

} 

而且随着服务,在方法调用onStart()或onStartCommand()API为5级和更新,你可以得到的对象:

MyObject obj = intent.getParcelableExtra("object"); 

这是所有:)

+0

如何向包裹发送多个单一数据值?我需要发送两个字符串。 – jax 2010-02-12 18:10:28

+0

intent.putExtra(“my.first.string”,“something”); intent.putExtra(“my.second.string”,“something else”); – hackbod 2010-02-12 19:09:02

+0

这仍然不适合我。我已经完成了上述所有,但仍然有问题。我如何通过Parcelable传递整个对象的状态?我知道我可以发送像String和Arrays这样的基本类型,但是按对象包含比这些更复杂的类。 – jax 2010-02-13 05:26:30

1

像BINO说,你需要让你的自定义对象实现Parcelable接口,如果你想通过一个意图将它传递给一个服务。这将使Android对象成为“序列化”的对象,以便您可以将它们传递给Intent的对象putExtra(String,Parcelable)调用。

对于简单的原始类型,已经有一堆setExtra(String,原始类型)方法。然而,据我了解,这不是您的选择,因此您应该购买包裹。

8

如果您不希望实现Parcelable和你的对象是可序列化

使用本

发信人Activiy

Intent intent = new Intent(activity, MyActivity.class); 

Bundle bundle = new Bundle(); 
bundle.putSerializable("my object", myObject); 

intent.putExtras(bundle); 

startActivity(intent); 

在接收器:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object"); 

适合我的工作尝试。但该对象必须可序列化:)

+0

对我来说,如果工作,但我不得不改变的东西,在发送部分: 'intent.putExtra(“传递对象”,bundle.getSerializable(“我的对象”))​​;' 而在接收部分: (myObject)intent.getExtras()。getSerializable(“传递的对象”);'' – Ruocco 2015-06-12 14:12:18

相关问题