通过意图将 class 对象传递给 android 中的广播接收器
passing an class object through intent to broadcast receiver in android
大家好,我卡住了,请帮帮我。
为我服务
ChatMessage chatMessage = new ChatMessage();
chatMessage.setId(10)
chatMessage.setMessage("hello");
Intent intent = new Intent("MessageReceiver");
intent.putExtra("chatobj", chatMessage);
getApplicationContext().sendBroadcast(intent);
在我的 Activity
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");
}};
此代码位于 activity 的开头,在 oncreate() 之前。这是个问题吗?
日志具有空值。这是为什么?
在模型 class 中实现 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");
在 onReceive()
你这样做:
ChatMessage chatMessage = new ChatMessage(getIntent().getSerializableExtra("chatobj"));
这会尝试从 Activity
开始的 Intent
中获取额外的 "chatobj"(getIntent()
是 Activity
上的一种方法,而不是BroadcastReceiver
上的一个方法),这就是你得到 null
.
的原因
您需要使用传递给 onReceive()
的 Intent
:
ChatMessage chatMessage = new ChatMessage(intent.getSerializableExtra("chatobj"));
大家好,我卡住了,请帮帮我。
为我服务
ChatMessage chatMessage = new ChatMessage();
chatMessage.setId(10)
chatMessage.setMessage("hello");
Intent intent = new Intent("MessageReceiver");
intent.putExtra("chatobj", chatMessage);
getApplicationContext().sendBroadcast(intent);
在我的 Activity
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");
}};
此代码位于 activity 的开头,在 oncreate() 之前。这是个问题吗? 日志具有空值。这是为什么?
在模型 class 中实现 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");
在 onReceive()
你这样做:
ChatMessage chatMessage = new ChatMessage(getIntent().getSerializableExtra("chatobj"));
这会尝试从 Activity
开始的 Intent
中获取额外的 "chatobj"(getIntent()
是 Activity
上的一种方法,而不是BroadcastReceiver
上的一个方法),这就是你得到 null
.
您需要使用传递给 onReceive()
的 Intent
:
ChatMessage chatMessage = new ChatMessage(intent.getSerializableExtra("chatobj"));