Android中没有处理异常

问题描述 投票:0回答:2

下面是一些代码行

 @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();
    }

我在这做错了什么?

java android exception exception-handling
2个回答
3
投票

异常抛出的范围与您预期的不同。它被抛在匿名内部类的onSuccess方法的范围内。您无法从getLocation方法传播此异常,因为在调用getLocation期间不会抛出异常,而是在实际使用成功侦听器的稍后时间。

还要注意,通过OnSuccessListener接口的契约,onSuccess方法不能抛出异常。您需要在此方法的实现中处理异常。


0
投票

这是因为OnSuccessListener的onSuccess方法既没有在throws部分声明你的异常,也没有用catch块处理它。这就是代码无法编译的原因。

© www.soinside.com 2019 - 2024. All rights reserved.