yongjhih 積分 2 編輯於

標題一開始的 AJAX 稍微誤導了我一下,看到 Fetch 忽然又明白了什麼。還是用 XHR 阿,基本上是再包裝成 promise 換個名字而已。AJAX 對我來說是非同步、動態地刷新頁面的概念,不限定使用怎麼樣的包裝與方法。

在這之前,有時懶得導入 fetch ,很無聊地自己把一些 XHR 包成 promise 就不管了 XD (e.g. yongjhih/bilibili-helper/commit/60ea2db1)

順便推一下 o3 相關文獻: 2014/11 blog2 2015/8 slides3

yongjhih 積分 0

沒錯,gerrit 就是用它。不過當初我混用 git cli 操作 repo 有時候 object 就消失了,Orz

yongjhih 積分 1

沒錯,已經準備一陣子了,https://github.com/ReactiveX/RxAndroid/issues/172

yongjhih 積分 3 編輯於

很大的 json 倒沒特別留意。但在使用 jackson ObjectMapper 時,要留意的是沿用 ObjectMapper instance, 否則要重新掃 annotations 會很花時間的。

不過後來我們都改用 ig-json-parser 的分支: LoganSquare1 了。

yongjhih 積分 0 編輯於

在這之前我已經在用 Builder 了.. 可能是我一直在用 master 的關係。auto-parcel 前些個月也有進 Builder feature.

所以,這應該是釋出穩定版號。

yongjhih 積分 0 編輯於

沒錯,希望大家會喜歡這篇。

我喜歡這種從需求面著手,演化過程的文章。

BTW, @yarikx 的 slideshow 也不錯,可以順手翻翻唷。

yongjhih 積分 0 編輯於

.toList() Orz.. 也就是末端如果一定要使用才自己轉換成 List。從維持可操作性到不可操作性。

.buffer(10).subscribe(listAdapter::addAll);

yongjhih 積分 4 編輯於

Observable<List<T>> -> Observable<T>

透過 .flatMap(Observable::from)

也就是徹底把 Observable<T> 當作 List<T> 用,無論裡面裝著一個還是多個。不會有其他 Collection 在傳遞。

yongjhih 積分 1 編輯於

那你一定要試試.. 你應該會喜歡。

基本上就是 AutoValue 的擴充(源碼也..),主要是多實現了 Parcelable 界面。

yongjhih 積分 0 編輯於

我這邊很少傳遞 Observable<List> ,習慣無論原始資料是不是 List ,都無條件展開才傳遞,為了方便其他人再做 operation。

yongjhih 積分 0 編輯於

rxandroid*, dagger2 都用上了,就感覺很清爽。 不過剛看到 model/ 部份不考慮用 AutoParcel 嗎?

yongjhih 積分 0 編輯於

今天收到 CEO 的信, 才發現.. Orz

yongjhih 積分 1

沒錯,一開始對於 stream 的感覺就是 command line 阿..

yongjhih 積分 0 編輯於

沒錯,硬要傳遞會用 zip ,只是看起來就稍顯複雜了,似乎不太適合拿來對照 Orz

yongjhih 積分 1 編輯於

可以,那 boolean showCustomers 就只能 final 了。主要為了表達 await 相當於 toBlocking().single/*() ,至少留一個,所以對照版本沒先寫 flatMap for database。

yongjhih 積分 0 編輯於

加裝個右鍵選單工具,如果不開 branch ,更新(pull --rebase)、存檔(commit)、上傳(push) 應該差不多吧,還支援離線作業。反而覺得好簡單阿 :)

yongjhih 積分 1 編輯於

私有的就 gitlab 開放的就 github

因為有架 git social hosting 已經三年多了,那時我有印象的是 gitorious、gitlab。而 gogs 與 gitbucket 是這一兩年我才聽到的,所以還沒機會。

BTW, 其他開發部屬:

git-repo tool 拉 code, gradle build, gitlab + github webhook, ci -> jenkins + travis-ci, issue tracker -> phabricator, code review -> gitlab merge-request + github pull-request

phabricator 是放在 docker container 裡 。架 gitlab 的時候,我 ubuntu kernel 還沒換,不能用 docker Orz..

yongjhih 積分 2 編輯於

@koji , 不好意思,我好像漏掉其他要回應的部份。

第一種寫法,在例外發生時,確實不會停掉 subscription ,不過,downloadObs 的部份要稍微修正:1. downloadObs.subscribeOn(Schedulers.io()) 下載需背景, 因為這裡 subscriber 已經回到 mainThread() 2. 在 downloadObs 時,Activity/Fragment 生命週期要留意,可包個 AppObservable.bindActivity(activity, downloadObs).subscribe(/*update ui*/)。

既然都已經交給 ViewObservable 做生命週期管理,所以為了不要再控制 scheduler, 我會選擇第二種寫法只要處理例外就好。

retry() 肯定要把錯誤吞掉才能繼續 retry ,不過如果你想要處理例外後再 retry ,你可以使用 retry(Func2<Integer, Throwable, Boolean> predicate)

.retry((i, e) -> { // here i is retry count
    e.printStackTrace();
    return true; // continue retry if return true
})
yongjhih 積分 0

搭配 autovalue 應該挺有趣的。不過要改一下 processor。

yongjhih 積分 1 編輯於

我的作法,也是文章內有提及的,在 Android 使用上,都養成習慣使用:AppObservable.bindFragment/.bindActivity ,預設就是幫你設定成 .observeOn(mainThread())