Java 使用Otto将数据从一个活动传递到另一个活动不起作用
这是我第一次使用这个库,但我遵循视频教程通过片段发送数据,但在我的例子中,它只是活动。。我就是这样做的 我正在发送数据的活动:Java 使用Otto将数据从一个活动传递到另一个活动不起作用,java,android,otto,Java,Android,Otto,这是我第一次使用这个库,但我遵循视频教程通过片段发送数据,但在我的例子中,它只是活动。。我就是这样做的 我正在发送数据的活动: public void onClick(View view) { String passing_data = new Gson().toJson(user); BusStation.getBus().post(new MessageData(passing_data)); Intent intent = new Intent(activity,U
public void onClick(View view) {
String passing_data = new Gson().toJson(user);
BusStation.getBus().post(new MessageData(passing_data));
Intent intent = new Intent(activity,UserAdsView.class);
activity.startActivity(intent);
}
公交车站等级:
public class BusStation {
private static Bus bus = new Bus();
public static Bus getBus() {
return bus;
}
}
public class MessageData {
private String msgData;
public MessageData(String msgData) {
this.msgData = msgData;
}
public String getMsgData() {
return msgData;
}
}
@Override
protected void onResume() {
super.onResume();
BusStation.getBus().register(this);
}
@Override
protected void onPause() {
super.onPause();
BusStation.getBus().unregister(this);
}
@Subscribe
public void recievedData(MessageData messageData){
target = messageData.getMsgData();
Toast.makeText(getApplicationContext(), target, Toast.LENGTH_SHORT).show();
}
MessageData类:
public class BusStation {
private static Bus bus = new Bus();
public static Bus getBus() {
return bus;
}
}
public class MessageData {
private String msgData;
public MessageData(String msgData) {
this.msgData = msgData;
}
public String getMsgData() {
return msgData;
}
}
@Override
protected void onResume() {
super.onResume();
BusStation.getBus().register(this);
}
@Override
protected void onPause() {
super.onPause();
BusStation.getBus().unregister(this);
}
@Subscribe
public void recievedData(MessageData messageData){
target = messageData.getMsgData();
Toast.makeText(getApplicationContext(), target, Toast.LENGTH_SHORT).show();
}
最后在UserAdsView活动:
public class BusStation {
private static Bus bus = new Bus();
public static Bus getBus() {
return bus;
}
}
public class MessageData {
private String msgData;
public MessageData(String msgData) {
this.msgData = msgData;
}
public String getMsgData() {
return msgData;
}
}
@Override
protected void onResume() {
super.onResume();
BusStation.getBus().register(this);
}
@Override
protected void onPause() {
super.onPause();
BusStation.getBus().unregister(this);
}
@Subscribe
public void recievedData(MessageData messageData){
target = messageData.getMsgData();
Toast.makeText(getApplicationContext(), target, Toast.LENGTH_SHORT).show();
}
正如视频中提到的,应该触发此方法
receiveddata
当您在当时的第一个活动中发送通知时,UserAdsView活动
未注册,因此事件没有侦听器
在这条线上
BusStation.getBus().post(new MessageData(passing_data));
您正在发送通知,但没有注册接收此通知。i、 e.UserAdsView活动
尚未启动
如果您需要在启动时将数据传递给activity,只需通过
您需要将MessageData对象打包 然后在您的
onClick()
中:
然后在UserAdsView活动的onCreate()
中:
MessageData data = (MessageData)getIntent().getExtras().getParcelable("key");
加载项文件渐变
dependencies {
compile 'com.squareup:otto:1.3.8'
}
创建OttoBus类
public class OttoBus {
private static Bus sBus;
public static Bus getBus() {
if (sBus == null)
sBus = new Bus();
return sBus;
}
}
在android中传递数据时创建事件类
public class Events {
public static class FragmentActivityMessage {
private String message;
public FragmentActivityMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
public static class ActivityFragmentMessage {
private String message;
public ActivityFragmentMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
}
函数传递数据
public void sendMessageToFragment(View view) {
EditText etMessage = findViewById(R.id.activityData);
OttoBus.getBus().post(String.valueOf(etMessage.getText()));
}
函数事件getdata
@Subscribe
public void getMessage(Events.ActivityFragmentMessage message) {
TextView messageView = findViewById(R.id.message);
messageView.setText(message.getMessage());
}
那么我需要做什么呢?重写onStart和BusStation.getBus().寄存器(this)?否。请参阅我的更新答案。您只需将数据发送到
Intent
中的活动即可。在这种情况下,您可以使用Sticky Event
。我将对其进行搜索。您还可以将MessageData对象打包。参见nipun.birla的回答。getExtras()
不存在。它是getIntent().getExtras()
这里的新消息数据(传递数据))代码>它说我需要强制转换,我确实这样做了,但应用程序只是返回到以前的活动。你是否使MessageData类可打包?谢谢你,但它应该是OttoBus.getBus().post(new Events.ActivityFragmentMessage(String.valueOf(etMessage.getText());谢谢你,OttoBus.getBus().post(String.valueOf(etMessage.getText());您可以更改OttoBus.getBus().post(new Events.ActivityFragmentMessage(String.valueOf(etMessage.getText()));