【问题标题】:passing an class object through intent to broadcast receiver in android通过意图将类对象传递给android中的广播接收器
【发布时间】:2023-12-22 19:23:02
【问题描述】:

大家好,我陷入了困境,请帮帮我。

为我服务

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() 之前。这是一个问题吗? 日志具有空值。这是为什么呢?

【问题讨论】:

  • 请在模型类中编写 ChatMessage 实现 Serializable。问题将得到解决

标签: android android-intent broadcastreceiver


【解决方案1】:

在模型类中实现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");

【讨论】:

  • 我已经完成了,即使我在那个类中有 3 个构造函数。 public ChatMessage(){} public ChatMessage(Serializable chatmsg){ }
【解决方案2】:

onReceive() 你这样做:

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

这试图从Activity 开始的Intent 中获取额外的“chatobj”(getIntent()Activity 上的方法,而不是BroadcastReceiver 上的方法),这就是为什么你会得到null

您需要使用传递给onReceive()Intent

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

【讨论】:

  • 对不起,先生,它仍然是空的。
最近更新 更多