Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从firebase加载WhatsApp标签?_Java - Fatal编程技术网

Java 如何从firebase加载WhatsApp标签?

Java 如何从firebase加载WhatsApp标签?,java,Java,问题描述 如何从firebase加载标签包 链接 我已经经历过了- 好吧,在从firebase加载标签之前,您必须创建一个包含标签属性、提供程序和更多内容的类(您可以很容易地知道如何从firebase检索数据,对于任何数据都是一样的,所以我将跳过这一步) 动态WAStickers应用程序应具有以下特征: 内容提供商提供必要的详细信息 它应该向Whatsapp发送一份意向书,分享所有贴纸包装的必要细节 图像必须采用(或转换为)webp格式 为什么它应该有内容提供商? 内容提供者是位于应用程序及

问题描述 如何从firebase加载标签包

链接 我已经经历过了-

好吧,在从firebase加载标签之前,您必须创建一个包含标签属性、提供程序和更多内容的类(您可以很容易地知道如何从firebase检索数据,对于任何数据都是一样的,所以我将跳过这一步)

动态WAStickers应用程序应具有以下特征:

  • 内容提供商提供必要的详细信息
  • 它应该向Whatsapp发送一份意向书,分享所有贴纸包装的必要细节
  • 图像必须采用(或转换为)webp格式
为什么它应该有内容提供商?

内容提供者是位于应用程序及其数据源之间的类,其工作是提供对底层数据源的轻松访问。设备上的其他应用程序也可以访问此数据

@Override
    public String getType(@NonNull Uri uri) {
        final int matchCode = MATCHER.match(uri);
        switch (matchCode) {
            case METADATA_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case METADATA_CODE_FOR_SINGLE_PACK:
                return "vnd.android.cursor.item/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case STICKERS_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + STICKERS;
            case STICKERS_ASSET_CODE:
                return "image/webp";
            case STICKER_PACK_TRAY_ICON_CODE:
                return "image/png";
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }
要向WhatsApp提供有关StickPack的必要信息,您需要创建一个名为StickPack的类,该类将包含以下参数

class StickerPack implements Parcelable {
    String identifier;
    String name;
    String publisher;
    String trayImageFile;
    final String publisherEmail;
    final String publisherWebsite;
    final String privacyPolicyWebsite;
    final String licenseAgreementWebsite;

    String iosAppStoreLink;
    private List<Sticker> stickers;
    private long totalSize;
    String androidPlayStoreLink;
    private boolean isWhitelisted;

    StickerPack(String identifier, String name, String publisher, String trayImageFile, String publisherEmail, String publisherWebsite, String privacyPolicyWebsite, String licenseAgreementWebsite) {
        this.identifier = identifier;
        this.name = name;
        this.publisher = publisher;
        this.trayImageFile = trayImageFile;
        this.publisherEmail = publisherEmail;
        this.publisherWebsite = publisherWebsite;
        this.privacyPolicyWebsite = privacyPolicyWebsite;
        this.licenseAgreementWebsite = licenseAgreementWebsite;
       }
    }
在上面的方法中,我们向MATCHER对象添加了一个Uri模式,现在我们需要匹配该模式并返回准确的Uri,该Uri将显示标签数据在设备上的位置。接下来,WhatsApp命中的Url被传递到getType函数,以将其与Uri匹配,并返回数据在设备上的特定位置

@Override
    public String getType(@NonNull Uri uri) {
        final int matchCode = MATCHER.match(uri);
        switch (matchCode) {
            case METADATA_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case METADATA_CODE_FOR_SINGLE_PACK:
                return "vnd.android.cursor.item/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case STICKERS_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + STICKERS;
            case STICKERS_ASSET_CODE:
                return "image/webp";
            case STICKER_PACK_TRAY_ICON_CODE:
                return "image/png";
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }
接下来,根据Url,我们调用查询方法,该方法将匹配Uri并返回特定Uri的游标对象

@Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        final int code = MATCHER.match(uri);
        if (code == METADATA_CODE) {
            return getPackForAllStickerPacks(uri);
        } else if (code == METADATA_CODE_FOR_SINGLE_PACK) {
            return getCursorForSingleStickerPack(uri);
        } else if (code == STICKERS_CODE) {
            return getStickersForAStickerPack(uri);
        } else {
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }
游标是迭代器,提供对内容提供者数据的读/写访问

请参阅中的GetPackForAllStickPacks()、getCursorForSingleStickerPack()和GetStickPackinfo()函数。了解游标对象提供的数据类型

祝贺你现在您已经达到了第一个里程碑。到目前为止,我们了解到:

  • 什么是内容提供商
  • 我们通过ContentProviders发送什么类型的数据
  • 我们如何处理Uri以提供特定的游标对象
如果你能回答这些问题,那么恭喜!!你做得很好。如果不是的话,我建议你阅读有关ContentProviders和UriMatcher的内容,以获得正确的理解

之后,您只需要从firebase加载内容,firebase在您的类上应该具有相同的结构

资料来源:

@Override
    public String getType(@NonNull Uri uri) {
        final int matchCode = MATCHER.match(uri);
        switch (matchCode) {
            case METADATA_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case METADATA_CODE_FOR_SINGLE_PACK:
                return "vnd.android.cursor.item/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + METADATA;
            case STICKERS_CODE:
                return "vnd.android.cursor.dir/vnd." + BuildConfig.CONTENT_PROVIDER_AUTHORITY + "." + STICKERS;
            case STICKERS_ASSET_CODE:
                return "image/webp";
            case STICKER_PACK_TRAY_ICON_CODE:
                return "image/png";
            default:
                throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }
@Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        final int code = MATCHER.match(uri);
        if (code == METADATA_CODE) {
            return getPackForAllStickerPacks(uri);
        } else if (code == METADATA_CODE_FOR_SINGLE_PACK) {
            return getCursorForSingleStickerPack(uri);
        } else if (code == STICKERS_CODE) {
            return getStickersForAStickerPack(uri);
        } else {
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }
    }