【问题标题】:Thumbs up/ Thumbs down rating implementation using Rating class使用 Rating 类的 Thumbs up/Thumbs down 评级实施
【发布时间】:2016-12-19 08:36:25
【问题描述】:

在我的媒体播放器应用程序(基于 Android)中,我想实现一个拇指向上/拇指向下评级系统。现在,由于框架提供了一个默认的android.media.Rating 类来处理不同类型的评级,我正在想办法使用Rating 类来实现基于拇指的评级。

我编写了以下方法来设置上、下或未评级。

MediaMetadataCompat metadata; // initial metadata

public void setLiked() {
    RatingCompat likedRating = RatingCompat.newThumbRating(true);

    metadata = new MediaMetadataCompat
            .Builder(metadata)
            .putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING, likedRating)
            .build();
}

public void setDisliked() {
    RatingCompat dislikedRating = RatingCompat.newThumbRating(false);

    metadata = new MediaMetadataCompat
            .Builder(metadata)
            .putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING, dislikedRating)
            .build();
}

public void setUnrated() {
    RatingCompat unratedRating = RatingCompat.newUnratedRating(RatingCompat.RATING_NONE);

    metadata = new MediaMetadataCompat
            .Builder(metadata)
            .putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING, unratedRating)
            .build();
}

虽然我还没有测试这些方法,因为应用程序和模块都还没有完成。对歌曲应用评分是否正确?我也找不到找回评分的方法。

我已经翻阅了无数次文档,却没有得到太多线索;并且在线提供的任何示例都仅基于基于星级的评级。如果有人有使用 Ratings 类在 Android 中实现基于 Thumbs 的评分的经验,请在此处帮助我。谢谢。

TLDR

为了让这个问题不太具体,我提供了一个更笼统的解释,以便这个问题将来对其他人更有帮助。
基本上,我想要在基于 Thumbs 的评分上下文中对 Rating 类进行解释/示例。

【问题讨论】:

    标签: java android rating-system


    【解决方案1】:

    您的实现对我来说似乎是正确的,您可以使用此方法检索评分:

    metadata = new MediaMetadataCompat
                .Builder(metadata).build();
    RatingCompat rating = metadata.getRating(MediaMetadataCompat.METADATA_KEY_USER_RATING);
    //you can use rating.isRated() for getting is set or not
    //you can use rating.isThumbUp() for getting boolean value
    

    【讨论】:

    • 所以,不赞成会导致rating.isThumbUp() 返回false
    • 函数说明如下: * @return 如果评分为“拇指向上”则返回 true,如果评分为“拇指向下”则返回 false,* 如果评分样式不是 {@link #RATING_THUMB_UP_DOWN}或者如果它没有评级。所以是的:)
    • 哦!就在那儿!我怎么错过了!谢谢。试用代码后我会接受这个答案。
    【解决方案2】:

    如果我在上面写你的代码,我会这样做:

    MediaMetadataCompat metadata; // initial metadata
    
    public void setLiked(boolean liked) {
        buildMetaFor(RatingCompat.newThumbRating(liked));
    }
    
    public void setUnrated() {
        buildMetaFor(RatingCompat.newUnratedRating(RatingCompat.RATING_NONE));
    }
    
    public RatingCompat getRating() {
        return metadata.getRating(MediaMetadataCompat.METADATA_KEY_USER_RATING);
    }
    
    public MediaMetadataCompat buildMetaFor(RatingCompat rating) {
        metadata = new MediaMetadataCompat
                .Builder(metadata)
                .putRating(MediaMetadataCompat.METADATA_KEY_USER_RATING, rating)
                .build();
    
        return metadata;
    }
    

    【讨论】:

    • 谢谢,我通常会这样做。虽然我问这个问题的时候很着急,所以我只是在浏览器中复制粘贴了相同的功能并进行了相应的编辑。
    • 我认为您不想在构建器函数中使用“putRating()”。如果你说 return new Object.Builder(object).build(); 你的函数可能会更优雅因为现在不能直接使用getRating,会得到空指针异常。
    猜你喜欢
    • 2011-02-09
    • 1970-01-01
    • 2011-12-31
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多