@Nullable
    private String makeAbsoluteURL(@NonNull final String url) {
        // Check if uri is absolute or not, if not attach the connector hostname
        if (Uri.parse(url).isAbsolute()) {
            return url;
        }

        final String hostUrl = ConnectorFactory.getConnector(geocode).getHostUrl();

        // special case for scheme relative URLs
        if (StringUtils.startsWith(url, "//")) {
            return StringUtils.isEmpty(hostUrl) ? "https:" + url : Uri.parse(hostUrl).getScheme() + ":" + url;
        }

        if (!StringUtils.startsWith(url, "/")) {
            Log.w("unusable relative URL for geocache " + geocode + ": " + url);
            return null;
        }

        if (StringUtils.isEmpty(hostUrl)) {
            Log.w("unable to compute relative images URL for " + geocode);
            return null;
        }

        return hostUrl + url;
    }
Load an image from primary or secondary storage.

@param url           the image URL
@param pseudoGeocode the geocode or the shared name
@param forceKeep     keep the image if it is there, without checking its freshness
@return A pair whose first element is the bitmap if available, and the second one is {@code true} if the image is present and fresh enough.
main/src/main/java/cgeo/geocaching/network/HtmlImage.java