Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仅当我获取用户位置时,应用程序强制才会关闭_Android_Gps_Android Location - Fatal编程技术网

Android 仅当我获取用户位置时,应用程序强制才会关闭

Android 仅当我获取用户位置时,应用程序强制才会关闭,android,gps,android-location,Android,Gps,Android Location,每隔一段时间,我的应用程序就会在试图获取用户位置时崩溃。不幸的是,我没有这个错误,因为当我插入电脑时,它从未发生过 我正在使用它获取我的用户位置: LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); do

每隔一段时间,我的应用程序就会在试图获取用户位置时崩溃。不幸的是,我没有这个错误,因为当我插入电脑时,它从未发生过

我正在使用它获取我的用户位置:

 LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        double longitude = location.getLongitude();
        double latitude = location.getLatitude();

我想有时候这可能是空的?如果是这样,我如何修复此强制关闭?

您不能保证位置不会为null(可能没有最后一个已知位置),因此在中会出现NullPointerException

location.getLongitude()

检查那个位置!=在继续之前无效

获取位置时不会强制关闭。。在指定经度和纬度时,其力被关闭。。在指定值之前,如果(位置!=null),请输入

    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

//location might be null so
if(location != null)
{
        double longitude = location.getLongitude();
        double latitude = location.getLatitude();
}

当可能出现异常时,请始终使用Try&catch块。如果位置返回null,您将获得NullPointerException

try {

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        double longitude = location.getLongitude();
        double latitude = location.getLatitude();
    } catch (Exception e) {

    }

我建议不要使用自己的GPS。。使用融合位置提供程序:

以下是一个例子:

如果为空,我如何获取它?如果
location
为空,则表示由于连接问题或隐私设置,他们的设备无法建立位置。你的应用程序能在不知道具体位置的情况下工作吗?你能计算出他们最后的已知位置吗?然后你必须循环它直到它不为空。如果gps位置为空,你可以使用网络位置代替gps。90%这不会是空的。。这可能不太准确,但这也是另一种选择OK,所以我可以说不能获取gps信号或其他什么。执行尝试/捕获块不是盲目不执行空检查的“正确”方法,比空检查昂贵得多。但我同意你的看法,如果位置对象为空,我应该检查它。