Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何修复”;lambda表达式中使用的变量应为final“quot;”;?_Java_Lambda_Rx Java2 - Fatal编程技术网

Java “如何修复”;lambda表达式中使用的变量应为final“quot;”;?

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

我正在制作一个android应用程序,如果这是第一个api调用,我会尝试在地图上添加一个地图标记,或者只是重新设置标记的位置。我使用RxJava2重复调用API。问题是我无法检查它是否是第一个API调用,因为我不允许访问非最终布尔值

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