<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Monthira Chayabanjonglerd</title>
    <description>The latest articles on DEV Community by Monthira Chayabanjonglerd (@mikkipastel).</description>
    <link>https://dev.to/mikkipastel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F223392%2F8c561f20-9c5c-4ebf-af6d-b1961e7a7857.jpeg</url>
      <title>DEV Community: Monthira Chayabanjonglerd</title>
      <link>https://dev.to/mikkipastel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mikkipastel"/>
    <language>en</language>
    <item>
      <title>เข้าใจเรื่อง EventBus ใน 3 นาที</title>
      <dc:creator>Monthira Chayabanjonglerd</dc:creator>
      <pubDate>Tue, 10 Sep 2019 02:31:32 +0000</pubDate>
      <link>https://dev.to/ookbee/eventbus-3-hh3</link>
      <guid>https://dev.to/ookbee/eventbus-3-hh3</guid>
      <description>&lt;p&gt;รู้ว่าอ่านเองมันยาก เราเลยสรุปให้ อ่านเสร็จมาม่าสุกพอดี&lt;/p&gt;

&lt;p&gt;ถ้าคุณอยากโยนค่าอะไรไปซะอย่าง โดยไม่ต้องรู้จักกัน ขอแค่ส่งไปแล้วได้รับก็พอ&lt;br&gt;
ถ้าคุณอยากโยนค่าอะไรไปซะอย่าง โดยที่ไม่ต้องมานั่ง check ตลอดเวลาให้วุ่นวาย&lt;/p&gt;
&lt;h2&gt;
  
  
  EventBus เธอคือคำตอบ เพราะอะไรหล่ะ?
&lt;/h2&gt;

&lt;p&gt;สมมุติเราส่งของให้ลูกค้า โดยมีตัวกลางอย่างพี่แมสเป็นคนส่ง ซึ่งตัวกลางอย่างพี่แมสก็ต้องมีระบบรับของจากเราและส่งของไปให้ลูกค้า ทำให้ลูกค้าตามพัสดุจากพี่แมสได้ และรู้ว่าของถึงแล้วเมื่อพี่แมสโทรมาบอก&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgreenrobot%2FEventBus%2Fmaster%2FEventBus-Publish-Subscribe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgreenrobot%2FEventBus%2Fmaster%2FEventBus-Publish-Subscribe.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จากในแผนภาพนี้มีการทำงานดังนี้&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ตกลงกันก่อนว่าจะส่งอะไร เช่น event ชื่อพัสดุ&lt;/li&gt;
&lt;li&gt;จากนั้นคนส่งจะส่ง event โดยการ post&lt;/li&gt;
&lt;li&gt;พี่แมสหรือ EventBus รับ event ที่ว่า&lt;/li&gt;
&lt;li&gt;พี่แมสเอาไปส่งให้คนรับ&lt;/li&gt;
&lt;li&gt;คนรับจะได้รับ event ตอนที่ subscribe เรียบร้อยแล้ว&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  มาใช้งาน EventBus กันเถอะ
&lt;/h3&gt;

&lt;p&gt;ก่อนอื่น ใส่ลงไปใน dependency เสียก่อน&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gradle"&gt;&lt;code&gt;&lt;span class="n"&gt;implementation&lt;/span&gt; &lt;span class="s1"&gt;'org.greenrobot:eventbus:3.1.1'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;อ้างอิงจาก &lt;a href="https://github.com/greenrobot/EventBus" rel="noopener noreferrer"&gt;https://github.com/greenrobot/EventBus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;พออ่านๆพบว่าใน README.md อ่านแล้วจะงงๆเพราะไม่ได้บอกถึงขารับ ดังนั้นสรุปการใช้งานดังน้ี&lt;/p&gt;

&lt;p&gt;กำหนด &lt;strong&gt;Event&lt;/strong&gt; ที่จะรับ อาจจะสร้าง model class มาตัวนึง เช่น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MessageEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ฝั่งขาส่ง&lt;/strong&gt; อยากจะส่งอะไรก็ใช้เจ้า post พร้อมแนบ event ไปด้วย เช่น&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nc"&gt;EventBus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDefault&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MessageEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ReceivedGoods"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ฝั่งขารับ&lt;/strong&gt; เราต้อง &lt;em&gt;register&lt;/em&gt; มันก่อน มักจะใส่กันที่ &lt;code&gt;onCreate()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;onCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;savedInstanceState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Bundle&lt;/span&gt;&lt;span class="p"&gt;?)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;savedInstanceState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nc"&gt;EventBus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDefault&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;และ &lt;em&gt;unregister&lt;/em&gt; ด้วย มักจะใส่ที่ &lt;code&gt;onDestroy()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;onDestroy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;onDestroy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nc"&gt;EventBus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getDefault&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;unregister&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;จากนั้นฝั่งขารับสร้าง function เพื่อ Subscribe Event ที่เราจะรับ โดยการใส่เจ้า &lt;code&gt;@Subscribe&lt;/code&gt; และตามด้วย &lt;code&gt;threadMode&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ข้อควรระวัง function ที่รับ Event นั้น ต้อง public เท่านั้น ไม่งั้นแอป crash เพราะมันหาไม่เจอจ้า&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;threadMode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ThreadMode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;MAIN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;onMessageEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MessageEvent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ลองเอาไป run ดู พบว่าทำงานได้แล้ว เย้ๆๆๆๆ&lt;/p&gt;

&lt;h4&gt;
  
  
  อ่านเพิ่มเติม
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://greenrobot.org/eventbus/documentation/how-to-get-started/" rel="noopener noreferrer"&gt;How to get started with EventBus in 3 steps&lt;/a&gt;&lt;/p&gt;




</description>
      <category>android</category>
    </item>
  </channel>
</rss>
