通过意图将类对象传递给android中的广播接收器

时间:2017-08-02 07:22:08

标签: android android-intent broadcastreceiver

大家好,我被困在了一点,请帮帮我。

在我的服务中

ChatMessage chatMessage = new ChatMessage();
chatMessage.setId(10)
chatMessage.setMessage("hello");
Intent intent = new Intent("MessageReceiver");
intent.putExtra("chatobj", chatMessage);
getApplicationContext().sendBroadcast(intent);

在我的活动中

public final BroadcastReceiver ReceiveChat = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
ChatMessage chatMessage = new ChatMessage(getIntent().getSerializableExtra("chatobj"));
Log.v(CommonUtilities.TAG, chatMessage.getMessage()+": new message");
}};

在oncreate()之前,此代码是我的活动开始。这是一个问题吗? Log具有null值。那是为什么?

2 个答案:

答案 0 :(得分:4)

在模型类中实现Serializable。将解​​决问题

像这样

public class ChatMessage  implements Serializable{

 int id; 
 String name;
}

发送此类数据

Intent intent = new Intent("MessageReceiver");
Bundle args = new Bundle();
args.putSerializable("chatobj",(Serializable)chatobj);
intent.putExtra("DATA",args);
startActivity(intent);

接收此类数据

Intent intent = getIntent();
Bundle args = intent.getBundleExtra("DATA");
ChatMessage chatMessage = (ChatMessage) args.getSerializable("chatobj");

答案 1 :(得分:0)

Intent中执行此操作:

Activity

这试图获得" chatobj"来自getIntent()的{​​{1}}的额外费用ActivityBroadcastReceiver上的方法,而不是null上的方法),这就是为什么你得到Intent

您需要使用传递给onReceive()的{​​{1}}:

ChatMessage chatMessage = new ChatMessage(intent.getSerializableExtra("chatobj"));