@NonNull
    public static Geocache loadCacheTexts(final String geocode) {
        final Geocache partial = new Geocache();

        // in case of database issues, we still need to return a result to avoid endless loops
        partial.setDescription(StringUtils.EMPTY);
        partial.setShortDescription(StringUtils.EMPTY);
        partial.setHint(StringUtils.EMPTY);
        partial.setLocation(StringUtils.EMPTY);

        return withAccessLock(() -> {


            init();

            try {
                final Cursor cursor = database.query(
                        dbTableCaches,
                        new String[]{"description", "shortdesc", "hint", "location"},
                        "geocode = ?",
                        new String[]{geocode},
                        null,
                        null,
                        null,
                        "1");

                if (cursor.moveToFirst()) {
                    partial.setDescription(StringUtils.defaultString(cursor.getString(0)));
                    partial.setShortDescription(StringUtils.defaultString(cursor.getString(1)));
                    partial.setHint(StringUtils.defaultString(cursor.getString(2)));
                    partial.setLocation(StringUtils.defaultString(cursor.getString(3)));
                }

                cursor.close();
            } catch (final SQLiteDoneException ignored) {
                // Do nothing, it only means we have no information on the cache
            } catch (final Exception e) {
                Log.e("DataStore.getCacheDescription", e);
            }

            return partial;
        });
    }
Load the lazily initialized fields of a cache and return them as partial cache (all other fields unset).
main/src/main/java/cgeo/geocaching/storage/DataStore.java