sfdgasdfqqqq Ответов: 1

Indexoutofbounds: доступ к другой переменной класса


Я получаю исключение IndexOutOfBounds в своем коде на моем MainActivity.class.

Индекс: 0 Размер: 0

Я попытался распечатать координаты, которые я получаю, и он показывает фактические координаты, которые мне нужны. Когда я обращаюсь к переменной из другого класса, я ничего не получаю. В чем, по-видимому, проблема?

Что я уже пробовал:

I was trying to access coordinates from my ArrayList from Sample.class using:

This is my MainActivity.class

    public void onMapReady(GoogleMap googleMap) {

        mMap = googleMap;
        mMap.setMinZoomPreference(15.0f);
        mMap.setMaxZoomPreference(20.0f);
        mMap.setOnMapClickListener(this);;

        LatLng latLng = new LatLng(14.397420, 121.033051);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));


        double lat = smsReceiver.locationcoords.get(0);
        double lon = smsReceiver.locationcoords.get(1);


            LatLng geofencePos = new LatLng(lat,lon);
            geofenceMarker = mMap.addMarker(new MarkerOptions()
                .position(geofencePos));

    }
This is my SmsReceiver.class where I am getting the coordinates. I printed the coordinates and it displays the coordinates I am receiving.

ArrayList locationcoords = new ArrayList(); //variable set on public

public void sendDataToFirebase(SmsMessage sms, Context context) {

FirebaseApp.initializeApp(context);
databaseLocation = FirebaseDatabase.getInstance().getReference("smsdata");

String senderNumber = sms.getOriginatingAddress();
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
String message = sms.getMessageBody();
String[] separatedSMS = message.split("\\s+");
String needHelp = "I NEED HELP";


    DatabaseReference mRef = databaseLocation.push();
    Double latitudedb = Double.parseDouble(separatedSMS[1]);
    Double longitudedb = Double.parseDouble(separatedSMS[3]);


    HashMap<String, Double> coordinates = new HashMap<String, Double>();
    coordinates.put("latitude", latitudedb);
    coordinates.put("longitude", longitudedb);
    mRef.setValue(coordinates);

    locationcoords.add(latitudedb);
    locationcoords.add(longitudedb);

    double lat = locationcoords.get(0);
    double lon = locationcoords.get(1);
    System.out.println(lat);
    System.out.println(lon);




}

1 Ответов

Рейтинг:
2

OriginalGriff

Мы не можем помочь вам в этом - у нас нет доступа к вашим данным.
"Индекс вне границ" означает именно это: значение, предоставляемое для доступа к массиву, находится за пределами этого массива - либо отрицательно, либо больше или равно числу элементов в массиве.
Но мы понятия не имеем, какой метод вызывает ошибку или какие значения параметров вы ему передаете.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем этого сделать для вас - пришло время освоить новый (и очень, очень полезный) навык: отладку!