2016-10-27 48 views
-4

我有兩個字符串(經度和緯度)存儲在我的數據庫。我只希望在安裝了我的應用程序的設備到達特定位置時啓動活動。如何在if語句中檢查2個字符串?

我想過編寫一個if語句(請參閱下面的代碼)以解決此問題,但它不起作用。

是否有另一種方法呢?

任何人都可以提供建議嗎?

tvLatitude.setText(String.valueOf(gps.getLatitude())); 
tvLongitude.setText(String.valueOf(gps.getLongitude())); 
String longi = tvLongitude.getText().toString(); 
String lati = tvLatitude.getText().toString(); 
String WorkLocationlongi = "REQUIRED LONGITUDE"; 
String WorkLocationlati = "REQUIRED LATITUDE"; 
mRootRef.child("Longitude").setValue(longi); 
mRootRef.child("Latitude").setValue(lati); 

if (longi.equals(WorkLocationlati)&& lati.equals(WorkLocationlongi)){ 
    String dtbClockon = tvClock.getText().toString(); 
    mRootRef.child("Dave_Clock_on_date").setValue(formattedDateOnly); 
    mRootRef .child("Dave_Clock_on").setValue(dtbClockon); 
    startActivity(new Intent(getBaseContext(), MainActivity.class)); 
} 
else { 
    Toast.makeText(context,"Not in work area please enter the yard and try again",Toast.LENGTH_SHORT).show(); 
} 

謝謝。

+1

出了什麼問題?它是否編譯?如果有的話,是否應該是真實的,在什麼情況下應該是真實的?等等...... – George

+2

a)你是否混淆了lat:「if(** longi **。equals(WorkLocation ** lati **)&& lati.equals(WorkLocationlongi))」? b)在這種情況下,long/lat必須**完全相同。你應該添加一些「緩衝區」。手機的GPS越精確,就越難達到完全相同的位置。 – Fildor

+1

什麼「不起作用」? 「longi」和「lati」應該包含什麼? – QBrute

回答

1

我覺得這是對

if (longi.equals(WorkLocationlongi)&& lati.equals(WorkLocationlati)) 
+3

擊中確切的位置也將非常困難。我想OP將不得不跨越那個被認爲是「在工作區域」的地方。 – Fildor

+0

然後刪除幾個小數位爲我工作..我不想要大量的wokr只是檢查他們在該地區的東西。感謝您的幫助@almost –

1

我認爲問題是,GPS是不準確與變量混淆使用,基於這樣的假設,我建議改變

if (longi.equals(WorkLocationlati)&& lati.equals(WorkLocationlongi)) 

。所以即使您在同一地點,每次都會獲得不同的價值

您可以採用longi,lati,WorkLocationlati和WorkLocationlongi的前幾位小數。

注:(更多小數更精確的位置)

+0

他也可以計算到目標的距離,並將某個距離視爲可接受(=容錯)。儘管如此,使用字符串會變得更加困難。 – Fildor

+0

我只想要任何簡單的系統大聲笑..只是在登錄之前檢查他們正在工作的東西 –

+1

@MarkHarrop所以你想要的是一個「GPS柵欄」。你不能用一個特定的GPS位置來做到這一點。這就像一個點。你可以使用一個點和一定距離來覆蓋一個圓形的邊界。但是,這對某些建築物來說可能還不夠。您還必須記住,您可能沒有可用的建築物內的GPS修復程序。 – Fildor

相關問題