java.lang.ArrayIndexOutOfBoundsException в Android - PullRequest
0 голосов
/ 31 мая 2011

У меня есть приложение на Android (я запускаю его на эмуляторе), которое получает обновления местоположения, и я хочу узнать скорость устройства, которое я отслеживаю.

Я делаю это, вычисляя расстояние междудва последовательных обновления местоположения и расчет времени получения этих обновлений.

И, наконец, я хочу найти скорость, разделив расстояние и время (это грубая оценка, но у меня нет альтернативы)

И вот моя проблема:

У меня есть массив длины 2, в который я помещаю экземпляры времени .... но я получаю исключение

java.lang.ArrayIndexOutOfBoundsException в этой строке:

время [i] = t;

Вот мой код:

public void onLocationChanged(Location loc) {
        if (loc != null) {
           try{
            float[] distance = new float[2];
            long [] time=new long[2];
            loc.distanceBetween(first_gps_lat, first_gps_lon,
                    loc.getLatitude(), loc.getLongitude(), distance);
            long t=(long)(loc.getTime()*(1e-3));
            time[i]=t;

            if(time.length==2)
            {
            var=time[1]-time[0];
                time[0]=time[1];
                i=1;
            }
            i++;
            if(contor>0)
            {
            System.out.println("Distance is:" + distance[0] + "!!!!!!");
            }

            first_gps_lat=loc.getLatitude();

            first_gps_lon=loc.getLongitude();

            contor++;
           }
           catch(Exception e)
           {
               e.printStackTrace();
           }
            latitude = (int)(first_gps_lat * 1E6);
            longitude = (int)(first_gps_lon * 1E6);



        }

Кто-то знает, почему я получаю это исключение, потому что я не могувыяснить .. thx


РЕДАКТИРОВАТЬ:

Я изменил это, но все еще та же ошибка:

    time[i]=t;

        i=1;

            if(time[1]!=0)

            {

            var=time[1]-time[0];

                time[0]=time[1];

                i=1;
            }

Ответы [ 2 ]

0 голосов
/ 31 мая 2011

Посмотрите на этот фрагмент:

        if(time.length==2)
        {
        var=time[1]-time[0];
            time[0]=time[1];
            i=1;
        }
        i++;

После этого значение i равно 2, потому что time.length == 2 всегда равно true.В следующий раз, когда метод будет вызван, строка time[i]=t; вызовет ArrayIndexOutOfBoundsException.

Позднее редактирование:

Лучше не использовать массив только для двух переменных.

// in your activity
long oldTime, newTime, deltaTime;
oldTime = currentTimeMillis();

// in onLocationChanged()
newTime = currentTimeMillis();
deltaTime = (newTime - oldTime) / 1000; // if you need the value in seconds
oldTime = newTime;
0 голосов
/ 31 мая 2011

в качестве первого у вас есть оператор if, который всегда будет истинным

long [] time = new long [2];if (time.length == 2)

и я никогда не обнуляюсь, поэтому он будет увеличиваться при каждом изменении местоположения, так что он выйдет за пределы

...