Java 从重写类返回字符串

Java 从重写类返回字符串,java,android,Java,Android,我是java新手,在我的测试项目中遇到了一个问题如何从void方法返回值?如果我更改标题,我将收到以下错误: “试图使用不兼容的返回类型”下面是代码 public void show_sensor (Context appcontext, int sensortype){ new ReactiveSensors(appcontext).observeSensor(sensortype) .subscribeOn(Schedulers.computation())

我是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);
                }
            });
}
public void show_传感器(上下文appcontext,int sensortype){
新的反应式传感器(appcontext).观测传感器(sensortype)
.subscribeOn(Schedulers.computation())
.filter(ReactiveSensorFilter.filterSensorChanged())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新操作1(){
@凌驾
公共无效调用(ReactiveSensorEvent ReactiveSensorEvent){
SensorEvent=reactiveSensorEvent.getSensorEvent();
float x=事件值[0];
浮动y=事件值[1];
float z=事件值[2];
字符串消息=String.format(“x=%f,y=%f,z=%f”,x,y,z);
日志d(“陀螺仪读数”,信息);
}
});
}
我想返回“消息”有什么方法可以这样做吗?

我在获取应用程序上下文时也遇到了问题,因此我必须传递它,是否可以从类中获取ApplicationContext以便在后台运行?
(我想设置广播,但我不能在receiver类中使用“getApplicationContext()”)

这是不可能的,如果重写某个方法,则承诺返回类型将保持不变,因此不能


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

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

返回变量的最佳方法是使用接口与类通信

使用事件总线:

第一步。在格拉德尔:

compile 'org.greenrobot:eventbus:3.0.0'
第二步。定义消息

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

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

使用字符串作为返回类型,而不是void,这样您就可以将消息接收回调用方方法


如果该方法被重写,我们无法更改该方法的返回类型。

您不能。如果重写方法,则返回的类型必须相同。方法
调用(..)
由未知方法异步执行。因此,返回一个字符串(到那个未知的方法)在这里对你没有帮助。只是为了检查我的功能是否正常工作,我想我无法从应用程序中访问它。但它给了我一个想法。我可以将数据写入文件并随时读取。这是一种我将用于少数传感器的方法。我认为这会产生问题。除非它留在类中,否则全局变量不被认为是一个好的实践,因为它们使代码更难理解。在异步调用的情况下,情况更糟,因为您必须跟踪全局变量在另一个线程中的更改时间。您能解释更多吗?对java来说有点陌生。这是唯一一个答案,你不能,也有道理。我用一个新的参考编辑了我的答案,试试看,或者把你所有的同学都贴在问题上。非常感谢。我正在使用这个库,我的应用程序的其他部分与此无关。我现在正在阅读您的新参考。感谢lib参考,我认为最好的选择是使用事件,请尝试使用编辑过的帖子。事件总线非常适合传感器和异步事件。。。请小心注册/注销订阅者。