耳朵(八)文章詳情的評論及收藏

tags: 耳朵_android


最終效果圖:


之前已經(jīng)登錄成功, 并將cookie保存至本地, 今天的內(nèi)容有點多, 需要完成文章的評論瞧预、收藏以及分享功能。

如果你的后臺已經(jīng)能給你提供滿足上述功能的所有接口, 那自行跳過這一段. 目前 http://ear.life 采用的是WordPress搭建的網(wǎng)站, 評論的接口是有的, 但收藏并沒有提供, 我們可以配合著WP Favorite Posts來使用.

先進后臺去添加并配置WP Favorite Posts,


簡單配置后可以在web端看到收藏的按鈕了:

可是它并沒有為我們提供供APP調(diào)用的API, 那我們就自己寫一個:
先查一下數(shù)據(jù)庫, 看看WP Favorite Posts保存數(shù)據(jù)的位置在哪:

后面的meta_value里的176窑邦、172、178這些其實就是我們文章的post_id了,
OK, 知道了它的位置, 我們自己寫一個接口放出來:

下面代碼為PHP:

public function get_favorite(){ 
        global $json_api;

        //首先對cookie進行驗證
        if (!$json_api->query->cookie) {

            $json_api->error("You must include a 'cookie' var in your request. Use the `generate_auth_cookie` Auth API method.");

        }
        
        $user_id = wp_validate_auth_cookie($json_api->query->cookie, 'logged_in');

        if (!$user_id) {
            $json_api->error("Invalid authentication cookie. Use the `generate_auth_cookie` method.");
        }
        
        //接著查找收藏的所有postid
        $post_ids = array();
        if($result = mysql_query(" SELECT `meta_value` FROM `wp_usermeta` WHERE `meta_key` = 'wpfp_favorites' AND `user_id` = " .$user_id)){
 
            while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
                $str = substr($row[0], 4);
                $str = explode(";",$str);
                foreach ($str as $key => $value) {
                    if(strstr($value, "s:3:")){
                        $temp = strtr($value, array("s:3:" => "", '"' => ""));
                        $post_ids[count($post_ids)] = $temp;
                    }
                }
            }
            $str_ids = "";
            foreach ($post_ids as $id) {
                $str_ids = $str_ids.",".$id;
            }
            $str_ids = substr($str_ids, 1);

            //最后查詢所有postid的信息并返回
            if($result = mysql_query("SELECT `ID`, `post_date`, `post_title` FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_password` = '' AND `ID` IN (".$str_ids.") ")){
                $results = array();
                while ($row = mysql_fetch_assoc($result)) {
                    $results[] = $row;
                }

                return array(
                    'status' => 'ok',
                    'msg' => "",
                    'list' => $results
                );
            }

            // 關閉連接
            mysql_free_result($result);

        }else{
            echo mysql_error();
        }
    }

OK, 如果沒出意外的話可以看到接口列表處已經(jīng)多了一個get_favorite,



現(xiàn)在我們請求了看一看, 為了節(jié)省資源我這里只返回了id壕探、data和title, 并且沒有對分頁加載做處理, 后面可以根據(jù)需求再來修改.



正常的查詢出來了... 呃, 我怎么感覺不像在做APP反而像寫接口了... 后面還要加上收藏和取消收藏的接口, 這里直接上圖, 步驟略過, 不然觀眾都沒興趣了.

花了點時間, 為WordPress增加了get_favorite冈钦、get_favorite_ids和post_favorite三個接口, 現(xiàn)在我們來盡情的使用它吧.

回到ArticleDetailActivity, 首先是評論, 評論需要判斷是否登錄, 否則的話跳至登錄界面:

    tv_comment.onClick {
        if (!App.checkCookie(this)) {
            return@onClick
        }
        showComment("", "請輸入評論內(nèi)容")
    }

其次是剛剛添加的收藏功能:

    iv_collect.onClick {
        if (!App.checkCookie(this)) {
            return@onClick
        }

        val params = App.createParams
        params.put("json", "user/post_favorite")
        params.put("post_id", article!!.id!!)
        params.put("doAction", true)
        showLoading()

        HMRequest.go<FavoriteModel>(params = params, activity = this) {
            cancelLoading()
            iv_collect.setImageResource(if (it!!.after) R.drawable.icon_collected else R.drawable.icon_collect)
        }
    }

OK, 最后在onResume事件中記得查一查收藏的狀態(tài), 避免跳轉(zhuǎn)登錄后沒有及時刷新:

override fun onResume() {
    super.onResume()
    webView?.onResume()

    //先查查當前是否已經(jīng)收藏過
    if (App.cookie != null && article != null) {
        val params = App.createParams
        params.put("json", "user/post_favorite")
        params.put("post_id", article!!.id!!)

        HMRequest.go<FavoriteModel>(params = params) {
            iv_collect.setImageResource(if (it!!.before) R.drawable.icon_collected else R.drawable.icon_collect)
        }
    }
}

好了, 跑起來看一看,效果已經(jīng)實現(xiàn)了.


github: https://github.com/bxcx/ear
本節(jié)分支: https://github.com/bxcx/ear/tree/comment

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市李请,隨后出現(xiàn)的幾起案子瞧筛,更是在濱河造成了極大的恐慌,老刑警劉巖导盅,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件较幌,死亡現(xiàn)場離奇詭異,居然都是意外死亡白翻,警方通過查閱死者的電腦和手機乍炉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滤馍,“玉大人岛琼,你說我怎么就攤上這事〕仓辏” “怎么了槐瑞?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阁苞。 經(jīng)常有香客問我困檩,道長祠挫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任悼沿,我火速辦了婚禮茸歧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘显沈。我一直安慰自己,他們只是感情好逢唤,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布拉讯。 她就那樣靜靜地躺著,像睡著了一般鳖藕。 火紅的嫁衣襯著肌膚如雪魔慷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天著恩,我揣著相機與錄音院尔,去河邊找鬼。 笑死喉誊,一個胖子當著我的面吹牛邀摆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伍茄,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼栋盹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敷矫?” 一聲冷哼從身側(cè)響起例获,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曹仗,沒想到半個月后榨汤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怎茫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年收壕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轨蛤。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡啼器,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俱萍,到底是詐尸還是另有隱情端壳,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布枪蘑,位于F島的核電站损谦,受9級特大地震影響岖免,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜照捡,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一颅湘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栗精,春花似錦闯参、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薪夕,卻和暖如春脚草,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背原献。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工馏慨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姑隅。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓写隶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親讲仰。 傳聞我的和親對象是個殘疾皇子樟澜,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容