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()));