我是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;
答案 0 :(得分:3)
这是不可能的,如果你覆盖一个方法,你承诺返回类型将保持不变,所以你不能。
编辑:刚刚注意到你正在将消息变量中的值保存到某个日志文件中,尝试从另一个函数访问该日志文件并获取消息,这可能是最简单的解决方案。答案 1 :(得分:1)
返回变量的最佳方法是使用接口来传递类。
你使用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)
将结果设置为全局变量,然后访问该变量。