返回String形成一个覆盖的类

时间:2016-09-21 12:27:00

标签: java android

我是java的新手,在我的测试项目中我遇到了一个问题。
如何从void方法返回值?如果我更改标题,我会收到此错误:
"尝试使用不兼容的返回类型"这是代码

public void show_sensor (Context appcontext, int sensortype){

    new ReactiveSensors(appcontext).observeSensor(sensortype)
            .subscribeOn(Schedulers.computation())
            .filter(ReactiveSensorFilter.filterSensorChanged())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<ReactiveSensorEvent>() {
                @Override
                public void call(ReactiveSensorEvent reactiveSensorEvent) {
                    SensorEvent event = reactiveSensorEvent.getSensorEvent();

                    float x = event.values[0];
                    float y = event.values[1];
                    float z = event.values[2];

                    String message = String.format("x = %f, y = %f, z = %f", x, y, z);

                    Log.d("gyroscope readings", message);
                }
            });
}

我想返回&#34;消息&#34;有什么方法可以做到这一点吗? 我在获取应用程序上下文时遇到问题,所以我不得不传递它,是否有可能从类中获取ApplicationContext,以便我可以在后台运行它?
(我想建立一个广播和我不能在接收器类中使用&#34; getApplicationContext()&#34;

4 个答案:

答案 0 :(得分:3)

这是不可能的,如果你覆盖一个方法,你承诺返回类型将保持不变,所以你不能。

编辑:刚刚注意到你正在将消息变量中的值保存到某个日志文件中,尝试从另一个函数访问该日志文件并获取消息,这可能是最简单的解决方案。

答案 1 :(得分:1)

返回变量的最佳方法是使用接口来传递类。

Reference

Java Reference

你使用eventbus: Eventbus

步骤1.在gradle中:

compile 'org.greenrobot:eventbus:3.0.0'

步骤2.定义消息

public class MessageEvent {

public final String message;

public MessageEvent(String message) {
    this.message = message;
    }
}

第3步:准备订阅者:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
   Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}

第4步:注册订阅者

@Override
public void onStart() {
  super.onStart();
  EventBus.getDefault().register(this);
}

@Override
public void onStop() {
   EventBus.getDefault().unregister(this);
   super.onStop();
}

最后一步:派遣事件:

String message = String.format("x = %f, y = %f, z = %f", x, y, z);
EventBus.getDefault().post(new MessageEvent (message));
Log.d("gyroscope readings", message);

答案 2 :(得分:0)

不,我们无法从void方法返回值。

使用String作为返回类型而不是void,以便您可以将消息接收回调用方法。

如果覆盖该方法,我们无法更改该方法的返回类型。

答案 3 :(得分:-1)

将结果设置为全局变量,然后访问该变量。