【问题标题】:How do i check 2 strings in an if-statement?如何检查 if 语句中的 2 个字符串?
【发布时间】:2017-03-09 23:44:17
【问题描述】:

我的数据库中存储了两个字符串(纬度和经度)。我只希望在安装我的应用的设备到达特定位置后启动 Activity。

我想写一个 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();
}

谢谢。

【问题讨论】:

  • 出了什么问题?它编译吗?如果曾经评估为真,它应该在什么条件下评估为真?等等……
  • a) 你混淆了 lat 的 long 吗:“if (longi.equals(WorkLocationlati)&& lati.equals(WorkLocationlongi))” ? b) 在这种情况下,long/lat 必须完全相同相同。您应该添加一些“缓冲区”。手机的 GPS 越精确,就越难找到完全相同的位置。
  • 什么“行不通”? longilati 应该包含什么?
  • 为什么要在比较之前将纬度/经度转换为字符串?
  • 如果可以的话,我想建议使用额外的或完全其他的方法来确定“用户在工作场所”... 1. GPS 定位可能在建筑物内不可用。 (想想“地下室”或厚墙) 2. 对于不同的公司周边布局,您可能必须跨越一个不仅仅是点+距离(=圆形周长)的栅栏 - 想象在计算机上绘制一个多边形。所以你实际上必须检查你的修复是否在由不同位置旋转的区域内...... 3.其他方法可能要简单得多:例如只能通过公司的(本地)网络登录?

标签: java android if-statement


【解决方案1】:

我认为所使用的变量存在混淆,基于该假设,我建议更改

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

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

【讨论】:

  • 点击确切位置也将非常困难。我猜 OP 将不得不在该点周围的一小块区域内,将其视为“在工作区域内”。
  • 然后删除几个小数位对我有用.. 我不想要大量的 wokr 只是为了检查它们是否在该区域。感谢@almost 的帮助
【解决方案2】:

我认为问题在于 gps 不准确。所以即使你在同一个地方,你每次都会得到不同的价值

您可以取 longi、lati、WorkLocationlati 和 WorkLocationlongi 的前几位小数。

注意:(更多小数更精确的位置)

【讨论】:

  • 好吧,他也可以只计算到目标的距离,并认为某个距离是可以接受的(=误差容限)。不过,使用字符串会更难。
  • 我只想要任何简单的系统,哈哈。只是在登录之前检查他们是否正在工作
  • @MarkHarrop 所以你想要的是一个“GPS 围栏”。您无法通过一个特定的 GPS 位置来做到这一点。这就像一个点。您可以使用一个点和到它的一定距离来覆盖一个圆形周长。然而,对于某些建筑物来说,这可能还不够。您还必须记住,您可能无法在建筑物内进行 GPS 定位。
  • 我可以搜索gps围栏吗?不知道要搜索什么谢谢
  • @MarkHarrop 您应该计算 gps 位置和工作位置之间的差异(即,如果反抗小于 10,则让员工登录)。这是他们所采取的栅栏
【解决方案3】:

如果您将 longi 与 WorkLocationlati 进行比较,我相信您在比较错误的值。另外,我建议您为此创建一些范围,因为在 GPS 中要完全相同的位置会有点复杂。也许你应该在这里看看这个答案:Algorithm to find all Latitude Longitude locations within a certain distance from a given Lat Lng location

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2013-10-03
    相关资源
    最近更新 更多