使用Otto将数据从Activity传递到Activity不起作用

时间:2017-02-01 05:06:35

标签: java android otto

这是我第一次使用这个库,但我正在关注this视频教程通过Fragments发送数据,但就我而言,它只是活动..所以我这样做

我正在发送数据的活动:

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

BusStation课程:

public class BusStation {
    private static Bus bus = new Bus();

    public static Bus getBus() {
        return bus;
    }
}

MessageData类:

public class MessageData {
    private String msgData;

    public MessageData(String msgData) {
        this.msgData = msgData;
    }

    public String getMsgData() {
        return msgData;
    }
}

最后是在UserAdsView活动中:

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

正如视频中所提到的,应该触发此方法recievedData

3 个答案:

答案 0 :(得分:4)

当您在当时的第一个活动中发送通知时,UserAdsView Activity 未注册,因此有没有的事件侦听器。

在这一行

 BusStation.getBus().post(new MessageData(passing_data));

您正在发送通知,但没有注册接收此通知。即UserAdsView Activity尚未开始。

  

如果您需要在发布时将数据传递给活动,只需通过它发送即可   Intent

答案 1 :(得分:1)

添加文件Gradle

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

来源:https://code-android-example.blogspot.com/2019/08/pass-data-activity-to-fragment-in-android.html

答案 2 :(得分:0)

您需要将MessageData对象设为parcelable。

然后在onClick()

public void onClick(View view) {
    String passing_data = new Gson().toJson(user);
    Bundle extras = new Bundle();
    extras.putParcelable("key",new MessageData(passing_data));
    Intent intent = new Intent(activity,UserAdsView.class);
    intent.putExtras(extras)
    activity.startActivity(intent);
}

然后在您的UserAdsView活动的onCreate()中:

MessageData data = (MessageData)getIntent().getExtras().getParcelable("key");