如何在匿名类java中分配变量值

时间:2018-03-31 09:44:15

标签: java android rx-java android-room

我想将结果值分配给我的列表变量,但lambda中的变量必须是final,如果是final,则它不能接收值。

public List<PersonalInfo> getAllPatient() {

    List<PersonalInfo> mPersonalInfoList;
    AppDatabase db = AppDatabase.getAppDatabase(mContext);
    db.patientDao().getAll()
            .flatMapIterable(patientlist -> {
                    List<PersonalInfo> personalInfoList = new ArrayList<>();
                    for (PersonalInfo p: patientlist) {
                        p.setColor(getRandomMaterialColor("400"));
                        personalInfoList.add(p);
                    }
                    return  personalInfoList;
            })
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(result ->
               // error
                mPersonalInfoList =result
             );
    return mPersonalInfoList;
}

3 个答案:

答案 0 :(得分:0)

问题是您的方法在将值分配给变量之前返回。您可以通过锁定解决此问题。

试试这个:

public void onMarkerDrag(Marker marker) {
    AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle());

    if (arrayListPolygonData.size() > 1) {

        //step 1
        for (int i = 0; i < arrayListPolygonData.size(); i++) {

            MapPolygonData mapData = arrayListPolygonData.get(i);
            AlertUtils.showLog("marker", "mapData" + " marker id : " + mapData.id);

            if (marker.getSnippet().equals(mapData.id)) {

                mapData.latitude = marker.getPosition().latitude;
                mapData.longitude = marker.getPosition().longitude;
                mapData.latLng = marker.getPosition();

                arrayListPolygonData.set(i, mapData);

                break;
            }
        }

        //step 2
        polygonOptions = new PolygonOptions();

        for (int i = 0; i < arrayListPolygonData.size(); i++) {

            MapPolygonData mapData = arrayListPolygonData.get(i);

            LatLng latLng = mapData.latLng;

            arrayListLatLngs.add(mapData.latLng);

            if (polygon != null)
                polygon.remove();

            polygonOptions.add(latLng);
            polygonOptions.strokeColor(Color.RED);
            polygonOptions.fillColor(Color.parseColor("#40000000"));
            polygon = map.addPolygon(polygonOptions);

        }
    }

}

答案 1 :(得分:-1)

您可以将本地变量转换为类成员,它应该可以解决您的问题。

答案 2 :(得分:-1)

那么,在您的情况下,您可以初始化mPersonalInfoList,而不是分配您的结果,将其添加到mPersonalInfoList。

所以:

final List<PersonalInfo> mPersonalInfoList = new ArrayList<>();

...

.subscribe(result ->
    mPersonalInfoList.addAll(result);
);