{"id":2923,"date":"2025-11-12T10:25:06","date_gmt":"2025-11-12T03:25:06","guid":{"rendered":"https:\/\/portal-atlasx.cdg.co.th\/home\/?post_type=docs&#038;p=2923"},"modified":"2025-11-12T10:25:49","modified_gmt":"2025-11-12T03:25:49","slug":"apiservicecallback","status":"publish","type":"docs","link":"https:\/\/portal-atlasx.cdg.co.th\/home\/docs\/android\/services\/apiservicecallback\/","title":{"rendered":"ApiServiceCallback"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"apiservicecallback\">ApiServiceCallback<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"example-source-code\">Example Source Code<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Fira-Code\" style=\"font-size:.875rem;font-family:Code-Pro-Fira-Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>open class ApiServiceCallback&lt;T>(private val onResponseListener: OnResponseListener&lt;T>) : Callback&lt;T> {\n\n    interface OnResponseListener&lt;T> {\n        fun onSuccess(body: T)\n        fun onFailure(t: Throwable?)\n    }\n\n    override fun onResponse(@NonNull call: Call&lt;T>?, @NonNull response: Response&lt;T>) {\n        if (response.isSuccessful) onResponseListener.onSuccess(response.body()!!)\n        else onResponseListener.onFailure(ServerErrorException())\n    }\n\n    override fun onFailure(@NonNull call: Call&lt;T>?, @NonNull t: Throwable?) {\n        onResponseListener.onFailure(ConnectionErrorException())\n    }\n\n    class ServerErrorException : Exception()\n    class ConnectionErrorException : Exception()\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #001080\">open<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ApiServiceCallback<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;(<\/span><span style=\"color: #267F99\">private<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">val<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">onResponseListener<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">OnResponseListener<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;) : <\/span><span style=\"color: #267F99\">Callback<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt; {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">interface<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">OnResponseListener<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #0070C1\">T<\/span><span style=\"color: #000000\">&gt; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        fun <\/span><span style=\"color: #795E26\">onSuccess<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">body<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        fun <\/span><span style=\"color: #795E26\">onFailure<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">t<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">Throwable<\/span><span style=\"color: #000000\">?)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">override<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">fun<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">onResponse<\/span><span style=\"color: #000000\">(@<\/span><span style=\"color: #001080\">NonNull<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">call<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">Call<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;?, @<\/span><span style=\"color: #001080\">NonNull<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">response<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">Response<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #001080\">response<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">isSuccessful<\/span><span style=\"color: #000000\">) <\/span><span style=\"color: #001080\">onResponseListener<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">onSuccess<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #001080\">response<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">body<\/span><span style=\"color: #000000\">()!!)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #AF00DB\">else<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">onResponseListener<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">onFailure<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #795E26\">ServerErrorException<\/span><span style=\"color: #000000\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">override<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">fun<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">onFailure<\/span><span style=\"color: #000000\">(@<\/span><span style=\"color: #001080\">NonNull<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">call<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">Call<\/span><span style=\"color: #000000\">&lt;<\/span><span style=\"color: #267F99\">T<\/span><span style=\"color: #000000\">&gt;?, @<\/span><span style=\"color: #001080\">NonNull<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">t<\/span><span style=\"color: #000000\">: <\/span><span style=\"color: #267F99\">Throwable<\/span><span style=\"color: #000000\">?) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">        <\/span><span style=\"color: #001080\">onResponseListener<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">onFailure<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #795E26\">ConnectionErrorException<\/span><span style=\"color: #000000\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ServerErrorException<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #267F99\">Exception<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">ConnectionErrorException<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #267F99\">Exception<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"featured_media":0,"parent":2920,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"nav_title":"","positive":"","negative":"","footnotes":""},"docs_category":[],"class_list":["post-2923","docs","type-docs","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/2923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/comments?post=2923"}],"version-history":[{"count":1,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/2923\/revisions"}],"predecessor-version":[{"id":2924,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/2923\/revisions\/2924"}],"up":[{"embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs\/2920"}],"wp:attachment":[{"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/media?parent=2923"}],"wp:term":[{"taxonomy":"docs_category","embeddable":true,"href":"https:\/\/portal-atlasx.cdg.co.th\/home\/wp-json\/wp\/v2\/docs_category?post=2923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}