Java 从重写类返回字符串
我是java新手,在我的测试项目中遇到了一个问题Java 从重写类返回字符串,java,android,Java,Android,我是java新手,在我的测试项目中遇到了一个问题如何从void方法返回值?如果我更改标题,我将收到以下错误: “试图使用不兼容的返回类型”下面是代码 public void show_sensor (Context appcontext, int sensortype){ new ReactiveSensors(appcontext).observeSensor(sensortype) .subscribeOn(Schedulers.computation())
如何从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参考,我认为最好的选择是使用事件,请尝试使用编辑过的帖子。事件总线非常适合传感器和异步事件。。。请小心注册/注销订阅者。