Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Android hesaplama yaparken çökmesi
#1
Merhaba, bir adet array'im var ve bu array içinde kordinatlar mevcut.
Her kordinatın bir önceki kordinat arasındaki mesafeyi alarak toplam mesafeyi hesaplıyorum.

Array içindeki veri sayısı 5000'den fazla olursa uygulama kapanıyor. (Tam değeri bilmiyorum 5000 veya 6000 den fazla yapabiliyorum 5000 yapınca sorun yok fakat 6000 yapınca uygulama çöküyor)

Büyük ihtimalle hatalı kullanım yapıyorum, hata ne olabilir?

    for I := 0 to length(logGeçişNoktaları) - 1 do
   begin
     nextway := nextway + 1;
     if nextway = 2 then
     begin
       nextway := 1;
       tempdistance := trunc(Get2KoordinatToMetre(logGeçişNoktaları[i - 1],
         logGeçişNoktaları[i]));
       if tempdistance > 20 then
       begin
          distance := distance + tempdistance;
       end;
     end;
   end;
    lbl_distance.Text := trunc((trunc(distance) * (0.00062137119223733)))
    .ToString + ' Mil';
 end;

Function Get2KoordinatToMetre(Bas, bit: TMapCoordinate): EXTENDED;
begin
 Result := RadToDeg(ArcCos(sin(DegToRad(Bas.Latitude)) *
   sin(DegToRad(bit.Latitude)) + Cos(DegToRad(Bas.Latitude)) *
   Cos(DegToRad(bit.Latitude)) * Cos(DegToRad(Bas.Longitude - bit.Longitude))))
   * 60 * 1.1515 * 1.609344 * 1000;

end;

Ayrıca aşağıdaki satırı çıkarınca crash yemiyorum

 
 tempdistance := trunc(Get2KoordinatToMetre(logGeçişNoktaları[i - 1],

        logGeçişNoktaları[i]));
Muharrem ARSLAN
WWW
Cevapla
#2
Bir Exception oluşuyor olabilir mi ? İlgili metodun içindeki kodu try/except ile sarmalayıp bir deneyin, bakalım sonuç ne olacak.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Koordinat değerlerinden biri (Lat, long) sıfır veya Nan (değer alamamış koordinat) değere sahip olabilir. 
İlgili kısmı debug ederek listede yer alan tüm koordintları gözden geçirin. 
Nan değer varsa bunu aşağıdaki gibi bir kontrolle aşabilirsiniz. 
  if (Bas.Latitude.IsNan) or (Bas.Longitude.IsNan) or (bit.Latitude.IsNan) or (bit.Longitude.IsNan) then
   Result := 0
 else
   Result := RadToDeg(...);
Tabi bu durumda Nan olan koordinatlar, mesafe hesabının yanlış olmasına sebep olacaktır.
Begin : = end / 2;
Cevapla
#4
(20-04-2022, Saat: 11:41)RAD Coder Adlı Kullanıcıdan Alıntı: Koordinat değerlerinden biri (Lat, long) sıfır veya Nan (değer alamamış koordinat) değere sahip olabilir. 
İlgili kısmı debug ederek listede yer alan tüm koordintları gözden geçirin. 
Nan değer varsa bunu aşağıdaki gibi bir kontrolle aşabilirsiniz. 
  if (Bas.Latitude.IsNan) or (Bas.Longitude.IsNan) or (bit.Latitude.IsNan) or (bit.Longitude.IsNan) then
   Result := 0
 else
   Result := RadToDeg(...);
Tabi bu durumda Nan olan koordinatlar, mesafe hesabının yanlış olmasına sebep olacaktır.

Cevaplarınız için çok teşekkür ederim.
normalde lat ve long değerleri 0 veya nan olamaz (manuel kontrol ettiğimde de 0 veya nan yok), çekerken kontrolünü sağlıyorum. Fakat try except bloğun'a aldığımda  invalid floating mesajını aldım.

Sorun şuradaymış;
for içinde  logGeçişNoktaları  array'ını -1 yapıyorum bu nedenle for 0 olduğunda logGeçişNoktaları[-1]  değeri oluyor ve hata çıkıyor.
for'u 1 den başlatınca sorun çözülmüş oldu.
Muharrem ARSLAN
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Uygulama İkonu ARM 2 400 11-11-2025, Saat: 12:15
Son Yorum: ARM
  Android SDK kajmerantime 1 384 28-10-2025, Saat: 14:53
Son Yorum: cinarbil
  Android El Terminali Barkod Okuyucu Verisi tuna 0 333 17-10-2025, Saat: 01:07
Son Yorum: tuna
  Android işlem öneriliyor uyarısı! Coban 9 1.863 07-08-2025, Saat: 12:07
Son Yorum: RAD Coder
  FMX Android Adaptive Icons kullanabilir miyiz? egeven 1 2.156 30-06-2025, Saat: 21:46
Son Yorum: emozgun



Konuyu Okuyanlar: 1 Ziyaretçi