下面是一些代码行
@SuppressWarnings("MissingPermission")
public static Location getLocation() throws LocationNotFoundException{
mFusedLocationProviderClient.getLastLocation()
.addOnSuccessListener(myActivity, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location!=null) {
mLocation = location;
}
else {
throw new LocationNotFoundException();
}
}
});
return mLocation;
}
现在,LocationNotFoundException
是一个自定义的例外,扩展了Exception
类。我抛出自定义异常的行,我收到一个错误,指出LocationNotFoundException
未处理,即使我让异常使用throws
关键字向下移动调用堆栈,我在处理异常的地方使用try / catch块调用特定方法。
这是我处理异常的地方。
try {
mLocation = LocationUtil.getLocation();
} catch (LocationNotFoundException e) {
Toast.makeText(MainActivity.this, "Location Not found", Toast.LENGTH_LONG)
.show();
}
我在这做错了什么?
异常抛出的范围与您预期的不同。它被抛在匿名内部类的onSuccess
方法的范围内。您无法从getLocation
方法传播此异常,因为在调用getLocation
期间不会抛出异常,而是在实际使用成功侦听器的稍后时间。
还要注意,通过OnSuccessListener
接口的契约,onSuccess
方法不能抛出异常。您需要在此方法的实现中处理异常。
这是因为OnSuccessListener的onSuccess方法既没有在throws
部分声明你的异常,也没有用catch
块处理它。这就是代码无法编译的原因。