Java “如何修复”;lambda表达式中使用的变量应为final“quot;”;?
我正在制作一个android应用程序,如果这是第一个api调用,我会尝试在地图上添加一个地图标记,或者只是重新设置标记的位置。我使用RxJava2重复调用API。问题是我无法检查它是否是第一个API调用,因为我不允许访问非最终布尔值Java “如何修复”;lambda表达式中使用的变量应为final“quot;”;?,java,lambda,rx-java2,Java,Lambda,Rx Java2,我正在制作一个android应用程序,如果这是第一个api调用,我会尝试在地图上添加一个地图标记,或者只是重新设置标记的位置。我使用RxJava2重复调用API。问题是我无法检查它是否是第一个API调用,因为我不允许访问非最终布尔值 boolean firstReposition = true; //Create position call ISSPositionService service = ServiceGenerator.createService(IS
boolean firstReposition = true;
//Create position call
ISSPositionService service = ServiceGenerator.createService(ISSPositionService.class);
//create observable
Observable<ISSPositionData> issPositionCall = service.getPosition();
Disposable disposable = issPositionCall.subscribeOn(Schedulers.io())
.repeatWhen(completed -> completed.delay(30, java.util.concurrent.TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(positionData -> {
LatLng currentIssPosition = new LatLng(positionData.getIssPosition().getLatitude(), positionData.getIssPosition().getLongitude());
if (firstReposition) {
issMarkerOptions.position(currentIssPosition);
map.addMarker(issMarkerOptions);
firstReposition = false;
}
else {
issMarker.setPosition(currentIssPosition);
}
//animate camera so it shows current position
map.animateCamera(CameraUpdateFactory.newLatLng(currentIssPosition));
});
boolean firstresposition=true;
//创建职位调用
ISSPositionService=ServiceGenerator.createService(ISSPositionService.class);
//创建可观察的
可观测issPositionCall=service.getPosition();
一次性使用=issPositionCall.subscribeOn(Schedulers.io())
.repeatWhen(completed->completed.delay(30,java.util.concurrent.TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.订阅(职位数据->{
LatLng currentIssPosition=新LatLng(位置数据.getIssPosition().getLatitude(),位置数据.getIssPosition().Get经度());
如果(第一次重新定位){
ISMarkerOptions.position(当前ISSPosition);
map.addMarker(IsMarkerOptions);
第一次重新定位=错误;
}
否则{
issMarker.setPosition(当前IssPosition);
}
//设置摄影机动画,使其显示当前位置
map.animateCamera(CameraUpdateFactory.newLatLng(CurrentIsPosition));
});
如何重写代码以便能够检查和设置布尔值?使用
AtomicBoolean
,您可以使用set()
和get()
方法
AtomicBooleanFirstResposition=新的AtomicBoolean(真);
//创建职位调用
ISSPositionService=ServiceGenerator.createService(ISSPositionService.class);
//创建可观察的
可观测issPositionCall=service.getPosition();
一次性使用=issPositionCall.subscribeOn(Schedulers.io())
.repeatWhen(completed->completed.delay(30,java.util.concurrent.TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.订阅(职位数据->{
LatLng currentIssPosition=新LatLng(位置数据.getIssPosition().getLatitude(),位置数据.getIssPosition().Get经度());
如果(第一次重新定位){
ISMarkerOptions.position(当前ISSPosition);
map.addMarker(IsMarkerOptions);
第一次重新定位。设置(false);
}
否则{
issMarker.setPosition(当前IssPosition);
}
//设置摄影机动画,使其显示当前位置
map.animateCamera(CameraUpdateFactory.newLatLng(CurrentIsPosition));
});
当你使用一个?@JoakimDanielson似乎不起作用…声明了两个位置boolean firstresposition=true代码>为什么?你想做什么?@Deadpool对不起,我弄错了,只是试了一些东西,但忘了拿出来,相应地编辑了问题AutomicBoolean
set应该正确吗@亚历克索格尔
AtomicBoolean firstReposition = new AtomicBoolean(true);
//Create position call
ISSPositionService service = ServiceGenerator.createService(ISSPositionService.class);
//create observable
Observable<ISSPositionData> issPositionCall = service.getPosition();
Disposable disposable = issPositionCall.subscribeOn(Schedulers.io())
.repeatWhen(completed -> completed.delay(30, java.util.concurrent.TimeUnit.SECONDS))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(positionData -> {
LatLng currentIssPosition = new LatLng(positionData.getIssPosition().getLatitude(), positionData.getIssPosition().getLongitude());
if (firstReposition) {
issMarkerOptions.position(currentIssPosition);
map.addMarker(issMarkerOptions);
firstReposition.set(false);
}
else {
issMarker.setPosition(currentIssPosition);
}
//animate camera so it shows current position
map.animateCamera(CameraUpdateFactory.newLatLng(currentIssPosition));
});