检查 BitmapDescriptor 是否为空。

7

我想检查BitmapDescriptor是否为空。

BitmapDescriptorFactory.fromAsset的文档说明如下:

返回从资产加载的BitmapDescriptor,如果加载失败则返回null。

    BitmapDescriptor bd = BitmapDescriptorFactory.fromAsset("markerimages/filename.png");
    if (bd == null) {
        // doSomething...
    }

尽管如此,我无法捕获处于空状态的BitMapDescriptor - 即使我传递一个不存在的文件名,fromAsset方法也不会返回null。

你尝试过调试吗?我的意思是:你在那一行上设置了断点,看它实际返回了什么? - DigCamara
2个回答

1
也许fromAsset方法并不返回null,而是返回与defaultMarker()相同的值。(即文档是错误的)
我会检查获取到的a(可能不存在的资产)的值是否与defaultMarker()相等。这可能是您检测不存在资产的方法。

burntsugar和我发现使用返回的BitmapDescriptor会导致其在后续阶段进一步崩溃,这表明虽然它是一个BitmapDescriptor实例,但它没有由有效位图支持。该类是一个“句柄”,没有方法。我们能够通过直接使用另一种方法加载流并调用fromAsset()(如果InputStream!= null)来检测资源的(非)存在。那个方法可行,但只是一个变通方法。我只能假设文档有误。尝试加载不存在的资源必须足够成为一个特殊情况,以至于以前没有被注意到。 - slipperyseal

0

我发现,与文档相反,BitmapDescriptorFactory.fromAsset(String) 如果指定的资源不存在,不会返回null。 我目前正在实施一种解决方法,即使用AssetManager.list("")预加载已存在的资产列表。然后,对于所询问的资产名称,我搜索缓存的资产列表以确定指定的资产是否存在。

这是我能想到的最省资源的方法,因为当资产不存在时,我无法依赖于null返回。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接