Variable 'Number' is accessed from within inner class, needs to be declared final

148
22 сентября 2019, 08:30

Подскажите пожалуйста,как в InfoWindow вывести текст без final String, ибо иначе все маркеры будут с одним текстом. Мне требуется вывести в InfoWindow порядка 3-4 разных строк. Ниже фрагмент кода с скрина.

public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
            if(dataSnapshot.child("latitude").getValue() != null &&
                    dataSnapshot.child("longitude").getValue() != null) {
                double latt = dataSnapshot.child("latitude").getValue(Double.class);
                double longg = dataSnapshot.child("longitude").getValue(Double.class);
                LatLng newLocation = new LatLng(latt, longg);
                String sname = (String) dataSnapshot.child("sname").getValue();
                String text = (String) dataSnapshot.child("text").getValue();
                String Number = (String) dataSnapshot.child("number").getValue();
                String image = dataSnapshot.child("image").getValue(String.class);
                if (image.equals("akym")) {
                    mMap.addMarker(new MarkerOptions()
                            .position(newLocation)
                            .title(sname)
                            .snippet("Номер:"+Number+"\n"+"Описание:"+text)
                            .icon(BitmapDescriptorFactory.fromResource(R.mipmap.akym))
                    );
                    mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
                        @Override
                        public View getInfoWindow(Marker arg0) {
                            return null;
                        }
                        @Override
                        public View getInfoContents(Marker marker) {
                            View myContentView = getLayoutInflater().inflate(
                                    R.layout.custommarker, null);
                            TextView tvTitle = ((TextView) myContentView
                                    .findViewById(R.id.title));
                            tvTitle.setText(Number);
                            TextView tvSnippet = ((TextView) myContentView
                                    .findViewById(R.id.snippet));
                            tvSnippet.setText(marker.getSnippet());
                            return myContentView;
                        }
                    });

P.S Я знаю что код ужасен,но я учусь)

Answer 1

Чтобы получить доступ к переменной в inner классе метода, есть несколько вариантов:

  1. Вы можете либо сделать переменную глобальной (задать в теле класса) и в методе лишь менять/задавать значение.

  2. Вы можете внутри метода сделать финальную переменную-массив с единственным элементом: final String[] number = new String[1] и работать с ним: number[0] = "Текст"; tvTitle.setText(number[0]) и т.д.

READ ALSO
Маппинг запросов в SpringBoot 2+

Маппинг запросов в SpringBoot 2+

В проекте (SpringBoot 2+, thymeleaf) есть простой рест-контролер вида:

174
Как анимировать рукописный текст на веб-странице с помощью SVG

Как анимировать рукописный текст на веб-странице с помощью SVG

Я пытаюсь анимировать текст, который я создал и сохранил как SVGДо сих пор мне удавалось только оживить stroke, но это не то, что я хочу получить

173
Баннеры на мобильном

Баннеры на мобильном

Ковыряюсь с чужим кодом, не могу понять - почему баннеры не сжимаются под мобилкупробовал #content-desctop/mobile, media screen, auto-width, width-auto в css вот так:

173
CORS policy blocking

CORS policy blocking

Есть проект в котором нужно настроить авторизациюПри попытке авторизоваться вылазит Access to XMLHttpRequest at 'http://localhost:8080/login?username=admin&password=admin' from origin...

186