diycode-sdk 更新到 v0.1.0

· sloop · Created at · Last by pu5205 Replied at · 12986 hits
1644

更新日志

  • 修正若干错误 api
  • 结构微调
  • 添加登录状态判断
  • 添加登出事件回调
  • 添加直接获取用户资料的方法

项目简介

diycode
diycode-sdk

该项目是对 diycode api 的再次封装,从标准的 http 接口转化为用户可以直接调用的接口,在封装过程中会屏蔽掉部分细节,让其更加容易使用。

例如,让身份认证机制的透明化,用户正常登录后可以直接调用 API ,不需要为每一次请求都手动添加认证信息和捕获异常状态,假如用户操作了没有权限的内容,会返回错误信息,程序可以根据错误信息进一步的处理。

目前 SDK 是 Beta 公测版,可能某些接口是有问题的,如果使用过程中遇到了问题,可以提交 Issues 反馈问题详情,以方便我在后续版本中修复。

创作动机

Diycode 社区、项目、News、sites 的 API 发布了

diycode 的 api 发布已经很长时间了,想必有很多想做客户端练手的小伙伴看到它复杂的接口后都打了退堂鼓,毕竟相对于干货集中营这类的开放 api 来说,diycode api 的使用难度是其数倍之多。

为了让小伙伴们能更快速,更方便的开发出一个属于自己的 app,我才特地将数据请求这一层单独摘出来做了这个开源库,使用它,会让复杂的逻辑瞬间变的简单起来。

不信的话看下面,不到 10 行代码就能完成一次数据的请求处理,并且是用 EventBus 异步返回的,完全不用担心各种回调和线程问题。

使用方式

使用方式大概有 3 步,非常简单。

Step 1. 初始化 Diycode

初始化过程中使用的 应用ID 和 私钥 请到 Diycode 上自行注册获得。 点击此处注册应用

// (上下文,应用ID,私钥)
Diycode.init(context, client_id, client_secret);

初始化过程只需要执行一次,建议将该初始化的调用位置放在 Application 的 onCreate 方法中

Step 2. 获取实例

Diycode mDiycode = Diycode.getSingleInstance();

理论上只要你对其进行了初始化,就可以在任意的位置获取到 Diycode 的实例,并使用该实例进行数据请求。

Step 3. 请求数据并接收返回的内容

mDiycode.getTopic(topic.getId()); // 发出请求

// 接收数据
@Subscribe(threadMode = ThreadMode.MAIN)
public void onTopicDetail(GetTopicEvent event) {
    if (event.isOk()) {
        TopicContent topicContent = event.getBean();
    }
}

所有返回的 Event 命名都是很有规律的,一律为 “方法名+Event” ,例如:

  • getTopic => GetTopicEvent
  • login => LoginEvent

如果不知道返回的 Event 类型,也可以去查看注释中的内容,例如 getTopic 的注释,其中 @see 就是返回的 Event 类型:

/**
 * 获取 topic 内容
 *
 * @param id topic 的 id
 * @see GetTopicEvent <= 返回的 Event 类型
 */

当然了,使用 EventBus 的时候不要忘记注册,不然是接收不到事件的。

@Override
protected void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
protected void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

如果想要了解更多的 API 的话请查看 在线文档

Demo 效果

Demo 源码看这里

这是我开发的一个尚未完成的客户端,使用了这个 sdk 后,每一个 Activity(Fragment) 的代码量不超过 300 行就能完成所有功能。

更新一个 demo 展示,如下图,在完善了下拉刷新和上拉加载后,代码依旧不超过 300 行,去除导包和注释只有大约 200 行左右。

如何添加

Step 1. 添加JitPack仓库

在当前项目的根目录下的 build.gradle 文件中添加如下内容:

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}

Step 2. 添加项目依赖

dependencies {
        compile 'com.github.gcssloop:diycode-sdk:0.1.0'
}

常见问题

1. 异常状况的处理

在 SDK 设计过程中已经已经考虑到了可能会出现的一些意外情况,例如,网络差,数据请求失败,没有权限等等。

当出现异常情况时,结果依旧按照之前的方式返回,当出现意外状况时 eveng.isOk() 会被置为 false 状态,此时你可以使用 event.getCode() 来获取错误状态码,通过 event.getCodeDescribe() 来获取对错误状态码的描述。可以根据这些信息进行下一步的处理。

2. 如何处理重复请求

由于设计中使用了 EventBus 作为传递的媒介,在某些特殊的条件下很可能会出现如下的情况,在用户网络状态不好的情况下,用户重复的调用加载方法,发出多次重复请求,这些请求结果可能会在网络变好之后在很短的时间内一同返回,如何判断处理这些数据呢?

为例应对这种情况,我对所有的请求都进行了唯一的编号,可以根据编号进行处理。首先,在发出请求的时候可以获得一个编号:

String uuid = mDiycode.getTopic(topic.getId());

在数据返回的时候会附加上这一个编号,可以使用 getUUID 获得:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onTopicDetail(GetTopicEvent event) {
    String uuid = event.getUUID();
}

可以通过对比这两个编号来确定是哪次请求。

例如:用户多次调用上拉加载函数,我们只想保留第一次请求成功的结果,并且忽略后续重复的请求,就可以将请求同一区间数据的 uuid 全部记录下来,当返回结果属于这些 uuid 并且成功时,更新状态,并且忽略后续请求结果。

3. 如何区分请求

如果是请求的是不同数据类型,那么返回的接口是不同的,很容易区分,但是当请求的是同一数据类型,但作用不同时该如何区分?如 Demo 中第 2 个例子,里面涉及了两种请求,下拉刷新和上拉加载,所有数据返回都是使用 GetTopicsListEvent 接收,此时就要使用到 uuid 了,核心思想是请求时记录 uuid 和其对应的类型,接收时根据 uuid 判断请求类型:

// 请求状态 - 下拉刷新 还是 加载更多
private static final String POST_LOAD_MORE = "load_more";
private static final String POST_REFRESH = "refresh";
private ArrayMap<String, String> mPostTypes = new ArrayMap<>();    // 请求类型

// 刷新
private void refresh() {
    ...
    String uuid = mDiycode.getTopicsList(null, null, pageIndex * pageCount, pageCount);
    mPostTypes.put(uuid, POST_REFRESH);
    ...
}

// 加载更多
private void loadMore() {
    ...
    String uuid = mDiycode.getTopicsList(null, null, pageIndex * pageCount, pageCount);
    mPostTypes.put(uuid, POST_LOAD_MORE);
    ...
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onTopicList(GetTopicsListEvent event) {
    String postType = mPostTypes.get(event.getUUID());  // 获取请求类型
    if (event.isOk()) {
        if (postType.equals(POST_LOAD_MORE)) {
            // 是加载更多
        } else if (postType.equals(POST_REFRESH)) {
            // 是下拉刷新
        }
    } else {
        // 出现错误
    }
    mPostTypes.remove(event.getUUID()); // uuid 完成使命,从存储中移除
}

4. Diycode SDK 有缓存机制吗

就目前而言是没有的,Diycode SDK 仅仅是一个 api 的再次封装,如果是需要缓存建议放在上层应用,或者重新抽象一个数据层出来。

之前有考虑过载 Diycode 中添加数据缓存机制,但是由于不清楚上层应用的状态,随意的使用缓存机制反而可能会导致数据与服务器不同步,从而引发一些异常状态,所以推荐将缓存放在上层应用中,该 SDK 只做一些简单的数据请求。

作者简介

作者微博: @GcsSloop

个人网站: http://www.gcssloop.com

<a href="http://www.gcssloop.com/info/about/" target="_blank"> <img src="http://ww4.sinaimg.cn/large/005Xtdi2gw1f1qn89ihu3j315o0dwwjc.jpg" width="300"/> </a>

版权信息

Copyright (c) 2017 GcsSloop

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
共收到 103 条回复
3484 1482129854
hejunlin · #1 ·

大赞

1644
sloop · #2 ·

#1楼 @hejunlin 你也在做客户端吗,可以用 SDK,顺便帮我测试一下有没有什么 bug (⊙ω⊙)

96
xingstarx · #3 ·

sloop 棒棒哒

96
ernest · #4 ·

为啥不用retrofit来封装呢

1644
sloop · #5 ·

#4楼 @ernest 这个 SDK 就是基于 Retrofit + EventBus 的再次封装。

1644
sloop · #6 ·

有关 API 封装这一部分,后续会写一篇文章来说明。

96
ernest · #7 ·

学习一下oauth的使用😆

96

diycode社区网站代码, 开源吗?

96

应用列表里面的回调地址,填写什么?可以填写:urn:ietf:wg:oauth:2.0:oob?
Callback urls

urn:ietf:wg:oauth:2.0:oob Authorize

96

@sloop 应用列表里面的回调地址,填写什么?可以填写:urn:ietf:wg:oauth:2.0:oob?
Callback urls

urn:ietf:wg:oauth:2.0:oob Authorize

1644
sloop · #12 ·

#11楼 @albertlushuwei 随便写,手机应用用不到这个地址,实在不知道写什么,写 diycode 网址也行。

96

调用unlike,collectionTopic和unCollectionTopic时报错

96
run · #14 ·

楼主帮我看下? https://www.diycode.cc/topics/907

96
marcello · #15 ·

会开放注册的功能吗?我想写一个iOS的

96

不错

17Floor Deleted
96
memewry · #18 ·

滴滴

96

djdhjcj

20Floor Deleted
21Floor Deleted
22Floor Deleted
23Floor Deleted
24Floor Deleted
25Floor Deleted
26Floor Deleted
27Floor Deleted
28Floor Deleted
29Floor Deleted
30Floor Deleted
31Floor Deleted
32Floor Deleted
33Floor Deleted
34Floor Deleted
35Floor Deleted
36Floor Deleted
37Floor Deleted
38Floor Deleted
39Floor Deleted
40Floor Deleted
41Floor Deleted
42Floor Deleted
43Floor Deleted
44Floor Deleted
45Floor Deleted
46Floor Deleted
47Floor Deleted
48Floor Deleted
49Floor Deleted
50Floor Deleted
51Floor Deleted
52Floor Deleted
53Floor Deleted
54Floor Deleted
55Floor Deleted
56Floor Deleted
57Floor Deleted
58Floor Deleted
59Floor Deleted
60Floor Deleted
61Floor Deleted
62Floor Deleted
63Floor Deleted
64Floor Deleted
65Floor Deleted
66Floor Deleted
67Floor Deleted
68Floor Deleted
69Floor Deleted
70Floor Deleted
71Floor Deleted
72Floor Deleted
73Floor Deleted
74Floor Deleted
75Floor Deleted
76Floor Deleted
77Floor Deleted
78Floor Deleted
79Floor Deleted
80Floor Deleted
81Floor Deleted
8438 1596904482
9478yyk · #82 ·

桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php
人氣留言板【Telegram:kkk141】或【Skype:xc7794】
選妃:http://www.ny076699.com/forum.php
雙北直接看照選妃:https://t.me/kpk183
新竹直接看照選妃:https://t.me/jhy147
中部直接看照選妃:https://t.me/gghj11
南部直接看照選妃:https://t.me/gg4y1
北中南影片:https://t.me/yk958
高品質口碑素質好茶:http://www.ny076699.com/forum.php
熱門推薦好康半價茶:http://www.ny076699.com/forum.php
私房菜新妹妹下海咯客評可見:妹妹自己要求內射她哦 吃魚喝茶台灣茶魚全台灣外送茶台北外送茶台北外約茶莊無套茶莊台中外送茶高雄外送茶新竹彰化台南送茶留言板一夜情找小姐援交妹台灣本土妹妹兼職下海蘿莉學生雙胞胎3p爆乳單親媽媽高檔空姐麻豆小模藝人旅館愛愛全套服務口交愛愛按摩洗澡無套內射肛交後門口爆吞精LG舌吻69現金消費看照約妹約炮網站加入帳號立減現金1-5k多買多送免費加入會員桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

#今日約咩優惠公告
??單身男神套餐-單身狗看過來可以帶女友去玩??
優惠規則: ?必須是單身狗 ?被催婚/沒女友/沒炮友 ?拒絕毒客/酒客/澳客
優惠內容:
?一次性消費5k以上可帶回家吃飯-限時3h
?一次性消費8k以上可帶出去約會 看電影-限時4h
?一次性消費10k以上 可伴遊一天+聚會-限時5h
?一次性消費15k以上 可一天一夜呆一起
?一次性消費20k以上 可2天伴遊+回家吃飯+聚會
?包夜一次 免費陪三天三夜+回家吃飯+住你家
優惠期間【8/8/810號有效】
PS:不收紅包 不發紅包 免費陪睡 注:限額15個
注:限額15個! 注:限額15個 ! 注:限額15個!
??男神約咩紅包活動
?今日約咩 不限價位 免費送福袋一個-5k優惠券
?新客加節消費 終身半價 3次半價試車
?熟客消費15k以上 一夜情免費伴遊24h
?一次性買四節以上 免費陪酒 免費約會
?包夜一次 免費送空姐一夜情 處女
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

推薦一個緊急求助急需試車的妹妹
【蘿莉 158/21歲/46kg/Bcup】
家裡急需用錢。今天面試今天就下海、為了能趕快賺到錢妹妹還把本人照片給我讓我po出來
具體為什麼那麼缺錢妹妹不想跟我說.但是看妹妹的一些動作表情感覺很急的樣子.
服務:無套口交 帶套做/可以清水溝/可以揉 奶吸奶那是粉色的/鮑魚也可以 我跟 妹妹只有短暫的接觸。
聲音蠻可愛的.而且大眼也很可愛 給人的感覺像想是有錢人的孩子不知道妹妹經歷了什麼這麼急需用錢
所以喜歡這種類型的來約她吧價位你出我跟妹妹談
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

心雅 164cm/E奶/27歲
類型: #性感 #大奶+美腿白皙 配合高,騷B-騷癢難耐,太久沒被幹過了動賴6p889怎麼姿勢都會配合唷現在好想找個人痛痛快快的幹一炮不知道哪位哥哥開滿足她主動型 健談
職業:性感 火辣/風騷,加節更好玩
#服務:配合度超高,敢玩 尺度大 豪放 性欲強 超騷
#特殊:角色扮演,私下還會給拍照哦,無套吹,69互舔

桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

全程無套 口爆 肛交玩超大重口味推薦
藝名:汁畫 【寂寞少婦】
身材密碼:162/大D/27歲 【免費送你絲襪一雙】
PS:考慮到有的哥哥帶套玩的不舒服 無套插的才爽
特別面試她來兼職滿足各位大大的需求 什麼都玩
可吸可舔可69 可吞精 還可後門價位很便宜
人人都吃的起的優質好茶 歡迎哥哥來品嘗
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

私房菜好茶私下看照好久沒有推薦騷妹了
#絕對絕對淫蕩騷貨妹
#超級超級刺激的騷妹
彎彎 162 Dcup 24歲
昨天客人約的正妹 配合高 優質高 品質高
外貌素質高 重點什麼都可以配合玩 CP高
水多外粉內嫩穴很敏感很容易高潮喜歡玩法姿勢多變態度親切無刺青
不抽煙 很貼心 完全不會的喲
她絕對是您最佳的選擇 配合度高 敢玩
貨真價實淫蕩正慢功夫茶想挑戰嗎~
#約就送以下福利享受:
福利:正妹一週都會找免費的炮友
福利:享受正妹家的服務
福利:享受永久半價
福利:享受永久免費旅館
福利:可玩3P或是群P{vip}
福利:無套內射永久免費體驗
桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

茵茵 162/D/23歲
年輕的單親媽媽求救 下海只是為了
尋求一份生活費 你可以來幫幫她嗎?
生孩子不久 據推斷應該還有乳汁
因為家裡就她自己在帶寶寶 所以的話
可能說去旅館跟哥哥愛愛的時候 要帶上自己的寶寶喲

不介意的哥哥可以找我喲(如果介意的話 那我可以交代妹妹 把寶寶交給其他人照顧)
可以陪你玩你想要的尺度 當然 前提還是不變態 不SM喲 配合好的話會給你1H/2S
加節的話會適當的給肛交和中出喲
不是每個妹妹都會配合的桃子外送茶約妹約炮Line:jk163 或福利特價賴9478yy
桃子外送茶熱門推薦選妃:http://www.ny076699.com/forum.php

96
j54733 · #83 ·

又騷又緊的單親媽媽~ 賴:j54733
穎兒是我在嬰兒用品店裡遇見的,當時我陪朋友一起幫他的孩子選購奶瓶,穎兒原來和我的朋友認識,透過聊天發現她生活上遇到困難也挺可憐的,當下我們就交換了聯絡方式,也就開始慢慢的了解彼此。這段時間下來和穎兒聊的挺好,個性上也很和的來,她是個很善良的女孩,更善解人意,但也因此發現了她有出來下海兼職,最主要的原因就是她是個單親媽媽,年紀小的時候被騙懷孕了,後來男生跑了,留下她自己撫養孩子,穎兒想要給孩子一個更好的生活環境,所以下海兼職。我跟她也約過很多次,配合的很好,她的服務態度超讚,很主動性慾很強,重點是外貌也很漂亮,身材保持的很好,一直都有健身運動的習慣。平時在家帶完孩子做完家事,會趁著休息的時間做做有氧或是重訓。穎兒的身體是很敏感也容易高潮,雖然生過小孩,但是穴穴還是很緊,很粉。奶泡 吸奶 舔鮑 後背式 觀音坐蓮 泡澡 LG 還有更多想要嘗試的姿勢 可配合情趣用品【看配合fu】這是我發現的小秘密。也可以跟她約看電影或是外出玩,如果喜歡的話可以加賴聊一聊,因為小弟一直國外長期出差,疫情這段期間無法幫助她,在盡我最大努力的之下在這裡介紹她,希望你們能多幫助她,小弟在這裡謝謝你們了。她的賴:j54733 身材密碼:164 D 24歲 阿傑介紹

96
sdrtht · #84 ·
  1. 茶名:辰熙
  2. 茶種:台灣
  3. 茶型:163/48kg/25歲/C奶
  4. 照片來源:MM提供
  5. 服務內容:LG喇舌(看Fu 看衛生)、殘廢澡、無套BJ(看Fu 看衛生)、有套江西。無後門、不摳、不變態。MM 皮膚白晰(尤其臉部膚質好) 外貌甜美可愛型正咩 很建談好相處、有時講話很靠北笑點低、相當有女友FU。(通通都有) 6.LINE: 193748 選妹官網:www.tws69.com 消費日期:9/3 整體建議率:90 以下心得: 星期四下了班,立即騎動我的小BUBU,直衝跟GTO約定的房間, 總算在約定的時間之前到達。 進門之後,就立即被辰熙妹妹用溫暖的笑容迎接。與想像不同,看照片原本以為是高傲冷艷型的,結果真人實際上是可愛親切健談搞笑型,進門就是一直不斷的用翹唇親吻,阻礙你脫衣服的動作,好不容易掙脫她熱情的懷抱,終於讓我順利到達浴室,趕緊將身上工作的汗水洗淨 妹妹也跟著進來,迫不及待的要來驗驗我的跨下之雕。果不其然,妹子雙手用泡沫蹂躪了小兄弟之後, 我彷彿聽見她說了句:「我要不客氣的享用了」,就用跪姿滿懷歡喜之心的將小兄弟放入口中,我的腦門就像吃了一斤的哇沙比一樣被衝開一個大洞,因為工作的勞累,洗乾淨之後,我就直街攤在床上任人擺布。妹子用心替我按摩解除疲乏,翻過身後,就是直攻要害,上下其嘴, 我躺在床上流下男兒的淚水:這4.5K絕對超值! 過程中,妹子非常的配合,奈何我已經是中年死魚一枚,只想堅持傳統文化,恢復中華大好河山,驅逐韃虜揚我國威 總之,在一陣OOXX後,我帶著心滿意足的心情,朝著敵人打光了我最後一枚子彈, 結束後,要離開辰熙說 有空再約會哦… 我說有機會再約。 回沖率給90% LINE:193748
96
pu5205 · #85 ·

台灣外送茶台北叫小姐LINE:pu5205 正妹官網:www.xo522.com

台灣外送茶台北叫小姐LINE:pu5205 正妹官網:www.xo522.com

台灣外送茶台北叫小姐LINE:pu5205 正妹官網:www.xo522.com

台灣外送茶台北叫小姐LINE:pu5205 正妹官網:www.xo522.com

台灣外送茶台北叫小姐LINE:pu5205 正妹官網:www.xo522.com

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up