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