{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809"},"updated":{"$t":"2024-09-01T17:06:51.215-07:00"},"category":[{"term":"Android"},{"term":"kotlin"},{"term":"Database"},{"term":"Firebase"},{"term":"JaKo"},{"term":"Library"},{"term":"ML kit"},{"term":"design"},{"term":"jetpack"},{"term":"openSource"},{"term":"tutorials"},{"term":"أندرويد"},{"term":"الالعاب"},{"term":"تطبيقات"}],"title":{"type":"text","$t":"Android how"},"subtitle":{"type":"html","$t":""},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default?alt=json"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"12"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-8661720997591343113"},"published":{"$t":"2018-07-28T05:49:00.003-07:00"},"updated":{"$t":"2018-07-28T05:49:13.053-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"}],"title":{"type":"text","$t":"my title post 2"},"content":{"type":"html","$t":"this post 2\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNjj4Rgsu7hup2scYLJrll9gbz9f-X2cUpamvPIcisdplj5lPWGDZ9l2pZMldWTCu9pL5MHOsCNTuwN8YzLx3ljZODxuTY9yFmitli_613jL-tQdoVQD1j2OU8pF0-kTUPBtYv0WGdpOw\/s1600\/dataclass.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNjj4Rgsu7hup2scYLJrll9gbz9f-X2cUpamvPIcisdplj5lPWGDZ9l2pZMldWTCu9pL5MHOsCNTuwN8YzLx3ljZODxuTY9yFmitli_613jL-tQdoVQD1j2OU8pF0-kTUPBtYv0WGdpOw\/s320\/dataclass.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/8661720997591343113\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/my-title-post-2.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/8661720997591343113"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/8661720997591343113"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/my-title-post-2.html","title":"my title post 2"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNjj4Rgsu7hup2scYLJrll9gbz9f-X2cUpamvPIcisdplj5lPWGDZ9l2pZMldWTCu9pL5MHOsCNTuwN8YzLx3ljZODxuTY9yFmitli_613jL-tQdoVQD1j2OU8pF0-kTUPBtYv0WGdpOw\/s72-c\/dataclass.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-1055329635086263658"},"published":{"$t":"2018-07-28T04:29:00.001-07:00"},"updated":{"$t":"2018-07-28T11:24:54.184-07:00"},"title":{"type":"text","$t":"my title post1"},"content":{"type":"html","$t":"this is pos5t 1\u003Cdiv\u003E\u003Cbr\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgOA9gKtkkFIKr8HUX7Mij6XLZgB6g4tB7mmOAGRJ-P4BxOpvy2aaUsh6Dom5TwYuFsCq7CxdEMqa_njJ-VpfgMT4FRPqRo4IGLrUaOWMIUka3uo8kX_LTY3Pbb48m3ZyKak6DKmYFajv0\/s1600\/card-blog1.jpg\" imageanchor=\"1\"\u003E\u003Cimg border=\"0\" data-original-height=\"442\" data-original-width=\"647\" height=\"219\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgOA9gKtkkFIKr8HUX7Mij6XLZgB6g4tB7mmOAGRJ-P4BxOpvy2aaUsh6Dom5TwYuFsCq7CxdEMqa_njJ-VpfgMT4FRPqRo4IGLrUaOWMIUka3uo8kX_LTY3Pbb48m3ZyKak6DKmYFajv0\/s320\/card-blog1.jpg\" width=\"320\"\u003E\u003C\/a\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/1055329635086263658\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post_66.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1055329635086263658"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1055329635086263658"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post_66.html","title":"my title post1"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgOA9gKtkkFIKr8HUX7Mij6XLZgB6g4tB7mmOAGRJ-P4BxOpvy2aaUsh6Dom5TwYuFsCq7CxdEMqa_njJ-VpfgMT4FRPqRo4IGLrUaOWMIUka3uo8kX_LTY3Pbb48m3ZyKak6DKmYFajv0\/s72-c\/card-blog1.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-6383118353694611983"},"published":{"$t":"2018-07-28T04:28:00.001-07:00"},"updated":{"$t":"2018-07-28T04:52:59.999-07:00"},"title":{"type":"text","$t":"my title post"},"content":{"type":"html","$t":"this is simple post\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBw1QN7CoWbkXdnX8gFKH2X-j2RjT_5lhcLWNODnfRARRPOGjIZV_fKWzhC1eJwwnXBJtDUWzJz5s2xKXzW9d5BXGTS5b397TuRqpXsPQ34mR1VX3YBc2c3og_74Lf2vlrQUtkscCUNio\/s1600\/Room.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBw1QN7CoWbkXdnX8gFKH2X-j2RjT_5lhcLWNODnfRARRPOGjIZV_fKWzhC1eJwwnXBJtDUWzJz5s2xKXzW9d5BXGTS5b397TuRqpXsPQ34mR1VX3YBc2c3og_74Lf2vlrQUtkscCUNio\/s320\/Room.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/6383118353694611983\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post_28.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/6383118353694611983"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/6383118353694611983"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post_28.html","title":"my title post"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjBw1QN7CoWbkXdnX8gFKH2X-j2RjT_5lhcLWNODnfRARRPOGjIZV_fKWzhC1eJwwnXBJtDUWzJz5s2xKXzW9d5BXGTS5b397TuRqpXsPQ34mR1VX3YBc2c3og_74Lf2vlrQUtkscCUNio\/s72-c\/Room.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-2962521855622381664"},"published":{"$t":"2018-07-01T06:52:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.765-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Firebase"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kotlin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ML kit"}],"title":{"type":"text","$t":"فحص الباركود باستعمل مكتبة الفايربيز اندرويد"},"content":{"type":"html","$t":"\u003Cdiv class=\"mcontent\"\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4\u003E\nمقدمة\u003C\/h4\u003E\nالدرس الاخير من سلسلة التعلم الالي باستعمال فاير بيز و ضيفنا اليوم هو barcode حيث سيتمكن تطبيقك من قراءة مختلف انواع الباركودات         و يعتبر الباركود هو الوسيلة الافضل لنقل معلومة من العالم المادي الى العالم الافتراضي لانه سهل القراءة للالة كالعادة         اكثرنا من الكلام .\u003Cbr \/\u003E\n\u003Cb\u003E\u003Cbr \/\u003E\n\u003C\/b\u003E\u003Cb\u003Eتطبيقات تستخدم تقنية barcode\u003C\/b\u003E        \u003Cbr \/\u003E\n\u003Cul class=\"checklist\"\u003E\n\u003Cli\u003Eسناب تشات : للتعرف على حسابات المستخدمين\u003C\/li\u003E\n\u003Cli\u003Eواتساب ويب : لتسجيل الدخول الى وتساب ويب من خلال الهاتف\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cb class=\"\"\u003Eصورة ل barcode الخاص بي :\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiZWnW-6OYqJ_CMWxdOW1Cvz8V7cS1uWVQfrKxyFIgZcnonz-zjTh-Ef_MZK8y7EARaqUAODDBGhzvKLPYzjvJpQlFl4q0kkzt8jT9-tyk9gxMuAhSLrsYI4MogtOzy36AXIo3UMUR5wi4\/s1600\/card-blog1.jpg\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"442\" data-original-width=\"647\" height=\"218\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiZWnW-6OYqJ_CMWxdOW1Cvz8V7cS1uWVQfrKxyFIgZcnonz-zjTh-Ef_MZK8y7EARaqUAODDBGhzvKLPYzjvJpQlFl4q0kkzt8jT9-tyk9gxMuAhSLrsYI4MogtOzy36AXIo3UMUR5wi4\/s320\/card-blog1.jpg\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Cb class=\"\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhzOlhoB_iss21ToT4mNuq2NpHen3XDWCXRu_VkbX7Anugbco7SMOyVfJygaH2L7NcAuxJt9Hy3OMS97n1XJOaGFtzxs-s7fil-0r4jCxwc-VoLjKhU1KPKQyRLYSRSV41QvPsi2bJLo9k\/s1600\/QR_Code_ismail.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1600\" data-original-width=\"1600\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhzOlhoB_iss21ToT4mNuq2NpHen3XDWCXRu_VkbX7Anugbco7SMOyVfJygaH2L7NcAuxJt9Hy3OMS97n1XJOaGFtzxs-s7fil-0r4jCxwc-VoLjKhU1KPKQyRLYSRSV41QvPsi2bJLo9k\/s320\/QR_Code_ismail.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/b\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4 class=\"\"\u003E\nما هو الباركود barcode :\u003C\/h4\u003E\nاظن ان مفهوم الباركود واضح بالنسبة لك لهذا سنتتقل مباشرة الى انواع الباركود و كيف يمكن صنع باركود خاص بك .\u003Cbr \/\u003E\n\u0026nbsp;\u003Cb\u003Eانواع الباركود\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Cb\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjR-_ARD366zsqR848U64awMitkmKQx8xONLTxjXkTymS8PpIK-5wp6GsMLItJIlyPlVdNL_koW3lMBj60s13vKGA0OYdPxRdbXeY_HEUxtoOS5eEVw6p9XYyeU7mYzYfIg7swsuQLVmfI\/s1600\/1_-6kAh0YgKEzqf-oFQ6_kzg.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" class=\"max\" data-original-height=\"910\" data-original-width=\"1600\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjR-_ARD366zsqR848U64awMitkmKQx8xONLTxjXkTymS8PpIK-5wp6GsMLItJIlyPlVdNL_koW3lMBj60s13vKGA0OYdPxRdbXeY_HEUxtoOS5eEVw6p9XYyeU7mYzYfIg7swsuQLVmfI\/s1600\/1_-6kAh0YgKEzqf-oFQ6_kzg.png\" \/\u003E\u003C\/a\u003E\u003C\/b\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u003Cul class=\"text-left\" dir=\"ltr\"\u003E\n\u003Cli\u003E                Code 128 (                 \u003Ccode\u003EFORMAT_CODE_128\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                Code 39 (                 \u003Ccode\u003EFORMAT_CODE_39\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                Code 93 (                 \u003Ccode\u003EFORMAT_CODE_93\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                Codabar (                 \u003Ccode\u003EFORMAT_CODABAR\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                EAN-13 (                 \u003Ccode\u003EFORMAT_EAN_13\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                EAN-8 (                 \u003Ccode\u003EFORMAT_EAN_8\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                ITF (                 \u003Ccode\u003EFORMAT_ITF\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                UPC-A (                 \u003Ccode\u003EFORMAT_UPC_A\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                UPC-E (                 \u003Ccode\u003EFORMAT_UPC_E\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                QR Code (                 \u003Ccode\u003EFORMAT_QR_CODE\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                PDF417 (                 \u003Ccode\u003EFORMAT_PDF417\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                Aztec (                 \u003Ccode\u003EFORMAT_AZTEC\u003C\/code\u003E )             \u003C\/li\u003E\n\u003Cli\u003E                Data Matrix (                 \u003Ccode\u003EFORMAT_DATA_MATRIX\u003C\/code\u003E )             \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cb\u003Eصنع باركود خاص بك :\u003C\/b\u003E\u003Cbr \/\u003E\n\u0026nbsp;بما ان هذا ليس موضوعنا فساترك لك ابرز المواقع التي يمكنك من خلالها صنع QR code لتطبيقك مثلا .\u003Cbr \/\u003E\n\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\n\u003Ca href=\"https:\/\/www.qr-code-generator.com\/\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/www.qr-code-generator.com\u003C\/a\u003E    \u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4 class=\"\"\u003E\nقبل ان نبدا\u003C\/h4\u003E\n1-اذا لم تقم باضافة فايربيز الى تطبيقك حتى الان فيمكنك ذلك من خلال اتباع خطوات بسيطة في \u003Ca href=\"http:\/\/www.androidbella.com\/2017\/08\/firebase-initialize.html\" rel=\"nofollow\" target=\"_blank\"\u003Eتدوينة سابقة\u003C\/a\u003E .\u003Cbr \/\u003E\n\u0026nbsp;2-اضف السطر التالي         الى         \u003Cspan class=\"highlight-ab\"\u003E dependencies \u003C\/span\u003E\u003Cbr \/\u003E\n\u003Cdiv style=\"text-align: left;\"\u003E\n\u003Cspan class=\"highlight-ab\"\u003Ebuild.gradle -\u0026gt; app level\u0026nbsp;\u003C\/span\u003E\u0026nbsp;         \u003C\/div\u003E\n\u003Cdiv style=\"text-align: left;\"\u003E\n\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cdiv class=\"preparent\"\u003E\n\u003Cul class=\"tabs\"\u003E\n\u003Cli class=\"tab\"\u003E                    \u003Ca class=\"active\" href=\"https:\/\/www.blogger.com\/blogger.g?blogID=2144733614636667663#tab1\" tabindex=\"0\"\u003Egroovy\u003C\/a\u003E                \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv class=\"active\" id=\"tab1\"\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-groovy\"\u003Edependencies {\n\/\/ ...\n\nimplementation 'com.google.firebase:firebase-ml-vision:16.0.0'\n}\u003C\/code\u003E\u003C\/pre\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n3-\u0026nbsp;نقوم باضافة الكود التالي الى ملف\u0026nbsp;         \u003Cspan class=\"highlight-ab\"\u003E manifest.xml\u0026nbsp;\u003C\/span\u003E\u0026nbsp;         \u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"preparent\"\u003E\n\u003Cul class=\"tabs\"\u003E\n\u003Cli class=\"tab\"\u003E                    \u003Ca class=\"active\" href=\"https:\/\/www.blogger.com\/blogger.g?blogID=2144733614636667663#tab2\" tabindex=\"0\"\u003Exml\u003C\/a\u003E                \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv class=\"active\" id=\"tab2\"\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-xml\"\u003E\u0026lt;meta-data android:name=\"com.google.firebase.ml.vision.DEPENDENCIES\" android:value=\"text\"\/\u0026gt;\n\u003C\/code\u003E\u003C\/pre\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\nدور هذا الكود هو تحميل الملفات التي يحتاجها تطبيقك اثناء التنصيب كي لا تحدث معك اي مشكلة .اما ان لم تضفه فلا مشكلة         فسيتم تحميل الملفات المرغوب فيها عند اول تشغيل لتطبيقك على هاتف المستخدم لكن لا ينصح بهذا .\u003Cbr \/\u003E\n4- اذونات الكاميرا ان         كنت تريد استعمالها و اذونات الوصول الى الذاكرة يمكنك لهذه \u003Ca href=\"https:\/\/www.androidkotlin.es\/2018\/06\/permission01.html\" rel=\"nofollow\" target=\"_blank\"\u003Eالتدوينة ان تساعدك\u003C\/a\u003E .\u003C\/div\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4 class=\"curedit\"\u003E\nواجهة التطبيق :\u003C\/h4\u003E\nبالتاكيد واجهة التطبيق تعود اليك و التطبيق الذي استعمله فيه ملفين ل xml الاول باسم         \u003Cspan class=\"highlight-ab\"\u003E\u003Ca href=\"https:\/\/github.com\/abellaismail7\/firebase\/blob\/master\/app\/src\/main\/res\/layout\/image_labeling.xml\" rel=\"nofollow\" target=\"_blank\"\u003Eimage_labeling.xml\u003C\/a\u003E\u003C\/span\u003E        و التاني باسم         \u003Cspan class=\"highlight-ab\"\u003E\u003Ca href=\"https:\/\/github.com\/abellaismail7\/firebase\/blob\/master\/app\/src\/main\/res\/layout\/bottom_sheet.xml\" rel=\"nofollow\" target=\"_blank\"\u003Ebottom_sheet.xml\u003C\/a\u003E\u003C\/span\u003E        و كلاهما موجودان على         \u003Cspan class=\"highlight-ab\"\u003Egithub\u0026nbsp;\u003C\/span\u003E        وليست هناك حاجة الى ارفاقهما مع التدوينة\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh32z87JjWC5uOOlnc4mnk6fYdhsagx06tH9pHurZOxR_ZxJ6KrmYqEp-Dxlct4H4pjtHWtF2JdcfJJB4MFeSlT3BaMbY1qn2Ycq9gUPTecg9lk5-eJT08sVv_-qwqMmAsNZlFXi6iR2yo\/s1600\/Screenshot_1530385215.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1600\" data-original-width=\"800\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh32z87JjWC5uOOlnc4mnk6fYdhsagx06tH9pHurZOxR_ZxJ6KrmYqEp-Dxlct4H4pjtHWtF2JdcfJJB4MFeSlT3BaMbY1qn2Ycq9gUPTecg9lk5-eJT08sVv_-qwqMmAsNZlFXi6iR2yo\/s320\/Screenshot_1530385215.png\" width=\"160\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cdiv class=\"caution\"\u003E\nانا استعمل مكتبة للكاميرا بدلا من api الرسمي من اندرويد اسم المكتبة \u003Ca href=\"https:\/\/github.com\/RedApparat\/Fotoapparat\" rel=\"nofollow\" target=\"_blank\"\u003EFotoapparat\u003C\/a\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4 class=\"\"\u003E\nفحص الباركود\u003C\/h4\u003E\n\u003Cb\u003Eالفكرة العامة :\u003C\/b\u003E\u003Cbr \/\u003E\nحسنا لدي تطبيق يحصل على الصور اما من التقاطها مباشرة او من خلال اخدها من ذاكرة الهاتف في كلتا الحالتين سنحول الصورة الى         \u003Cspan class=\"highlight-ab\"\u003Ebitmap\u0026nbsp;\u003C\/span\u003E        و نقوم بتمريرها الى دالة باسم         \u003Cspan class=\"highlight-ab\"\u003EscanBarCode(bitmap:Bitmap)\u003C\/span\u003E        هذه الدالة تقوم باخد         \u003Cspan class=\"highlight-ab\"\u003Ebitmap\u0026nbsp;\u003C\/span\u003E        و تقوم بصنع نسخة منها قابلة للتعديل لان الاصلية ليست كذلك نمرر الصورة الى الفايربيز و يقوم باعطائنا احداثيات الباركود في         الصورة         \u003Cspan class=\"highlight-ab\"\u003EboundingBox\u003C\/span\u003E        نقوم نحن برسم اطار احمر على الباركود من خلال دالة         \u003Cspan class=\"highlight-ab\"\u003EdrawRect()\u0026nbsp;\u003C\/span\u003E        و ناخد القيم المآخودة من الباركود         \u003Cspan class=\"highlight-ab\"\u003ErawValue\u003C\/span\u003E        .\u003Cbr \/\u003E\n\u0026nbsp;        \u003Cb class=\"\"\u003Eربما الكود ابسط :\u003C\/b\u003E        \u003Cbr \/\u003E\n\u003Cdiv class=\"preparent\"\u003E\n\u003Cul class=\"tabs\"\u003E\n\u003Cli class=\"tab\"\u003E                    \u003Ca class=\"active\" href=\"https:\/\/www.blogger.com\/blogger.g?blogID=2144733614636667663#tab3\" tabindex=\"0\"\u003Ekotlin\u003C\/a\u003E                \u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cdiv class=\"active\" id=\"tab3\"\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eclass Mlearing : AppCompatActivity() {\nlateinit var sheetBehavior: BottomSheetBehavior\u003Cview\u003E\noverride fun onCreate(savedInstanceState: Bundle?) {\nsuper.onCreate(savedInstanceState)\nsetContentView(R.layout.image_labeling)\nsetSupportActionBar(toolbar)\nsheetBehavior = BottomSheetBehavior.from(bottom_sheet)\nval fotoapparat = Fotoapparat(context = this, view = camera_view)\nfotoapparat.start()\n\/\/اخد صورة\ntakePic.setOnClickListener {\nval photoResult = fotoapparat.takePicture()\nphotoResult\n.toBitmap()\n.whenAvailable { bitmapPhoto -\u0026gt;\nscanBarCode(bitmapPhoto!!.bitmap)\n}\n}\n\/\/اخد الصورة من الهاتف\nfromDevice.setOnClickListener {\nval photoPickerIntent = Intent(Intent.ACTION_GET_CONTENT)\nphotoPickerIntent.type = \"image\/*\"\nstartActivityForResult(photoPickerIntent, 1)\n}\n\n}\nprivate fun scanBarCode(bitmap: Bitmap) {\n\/\/تحويل بيتماب الى بيتماب قابل للتعديل\nval mBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)\nval canvas = Canvas(mBitmap)\n\/\/الحصول على الكود\nval image: FirebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap)\nval detector = FirebaseVision.getInstance().visionBarcodeDetector\ndetector.detectInImage(image)\n.addOnSuccessListener {\n\/\/ انتهى بنجاح\nLog.e(\"\", \"gooo\")\nfor (barcode in it) {\nval bounds = barcode.boundingBox\nval corners = barcode.cornerPoints\nval redPaint = getPaint(Color.RED, 20f)\ncanvas.drawRect(bounds, redPaint)\nval rawValue = barcode.rawValue\nToast.makeText(this, \"raw:$rawValue\", Toast.LENGTH_LONG).show()\nval valueType = barcode.valueType\nLog.e(\"RAW VAL\", \"$rawValue | $valueType | ${barcode.displayValue}\")\n}\nmImage.setImageBitmap(mBitmap)\nmImage.visibility = View.VISIBLE\n}.addOnFailureListener {\n\/\/ خطا ما وقع\nToast.makeText(baseContext, \"Sorry, something went wrong!\", Toast.LENGTH_SHORT).show()\n}\n}\n\nprivate fun getPaint(color: Int, width: Float = 1f): Paint {\nval p = Paint()\np.style = Paint.Style.STROKE\np.strokeWidth = width\np.isAntiAlias = true\np.isFilterBitmap = true\np.isDither = true\np.color = color\nreturn p\n}\n\noverride fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {\nsuper.onActivityResult(requestCode, resultCode, data)\nif (resultCode == RESULT_OK) {\nval chosenImageUri = data.data\n\nval mBitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, chosenImageUri)\nscanBarCode(mBitmap)\n}\n}\n}\n\n\u003C\/view\u003E\u003C\/code\u003E\n\u003C\/pre\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\"mcard card\"\u003E\n\u003Ch4\u003E\nالناتج\u003C\/h4\u003E\nللعلم فان النتائج كانت رائعة و اعجبتني و هذه         \u003Cspan class=\"highlight-ab\"\u003Escreenshots\u0026nbsp;\u003C\/span\u003E        منها يمكنك تجربتها على اي منتج في المنزل و ستجد انها تعمل بشكل جيد .\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\n\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgg06zAd6neAgFgrY3d6JGWgXayFjkjpVO_JRxpD74T-caZkoQph3PHrTa2XdiqGxVtllrCK6hQ4P7V8em0jAuJ-Me-tHuy_kR3Ge48he7Wn4KWpBpvynwq-w2RxtwS9B4zYKjN2cHMOag\/s1600\/Screenshot_2018-06-27-09-40-52.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1282\" data-original-width=\"1439\" height=\"285\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgg06zAd6neAgFgrY3d6JGWgXayFjkjpVO_JRxpD74T-caZkoQph3PHrTa2XdiqGxVtllrCK6hQ4P7V8em0jAuJ-Me-tHuy_kR3Ge48he7Wn4KWpBpvynwq-w2RxtwS9B4zYKjN2cHMOag\/s320\/Screenshot_2018-06-27-09-40-52.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg4J39O-sndxHFTi37x5DbRkfRJDzlCvQ77Cla8WmylOa61pmwSg1TYGsB4f15v7fyKKtJcP-ckQpgdcxzspJU72qEFUrUbXn_M6_1b6hCgDJWpcP_28cPibrlacfQApJxUiMhZ6yJtcl8\/s1600\/Screenshot_2018-06-27-10-52-35.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1299\" data-original-width=\"1433\" height=\"290\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg4J39O-sndxHFTi37x5DbRkfRJDzlCvQ77Cla8WmylOa61pmwSg1TYGsB4f15v7fyKKtJcP-ckQpgdcxzspJU72qEFUrUbXn_M6_1b6hCgDJWpcP_28cPibrlacfQApJxUiMhZ6yJtcl8\/s320\/Screenshot_2018-06-27-10-52-35.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cbr \/\u003E\n\u0026nbsp;         \u003Cbr \/\u003E\n\u003Cdiv class=\"caution\"\u003E\nللعلم فان وقت الاستجابة يطول و يمكنك جعله اقصر اذ حددت نوع الباركود الذي ترغب في فحص و يمكنك الاطلاع على المزيد من             \u003Ca href=\"https:\/\/firebase.google.com\/docs\/ml-kit\/android\/read-barcodes\" rel=\"nofollow\" target=\"_blank\"\u003Eالموقع الرسمي\u003C\/a\u003E .\u003C\/div\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cscript\u003E$(document).ready(function () { addSteps('[\"مقدمة\" ,\"ما هو الباركود barcode\" ,\"قبل ان نبدآ\" ,\"واجهة التطبيق :\" ,\"فحص الباركود\" ,\"الناتج\"]'); });\u003C\/script\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/2962521855622381664\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/2962521855622381664"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/2962521855622381664"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/07\/blog-post.html","title":"فحص الباركود باستعمل مكتبة الفايربيز اندرويد"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiZWnW-6OYqJ_CMWxdOW1Cvz8V7cS1uWVQfrKxyFIgZcnonz-zjTh-Ef_MZK8y7EARaqUAODDBGhzvKLPYzjvJpQlFl4q0kkzt8jT9-tyk9gxMuAhSLrsYI4MogtOzy36AXIo3UMUR5wi4\/s72-c\/card-blog1.jpg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-933435869481189108"},"published":{"$t":"2018-06-27T00:24:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.937-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"JaKo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"tutorials"}],"title":{"type":"text","$t":"الحصول على الاذونات في الاندرويد الجزء الاول"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mcontent\"\u003E\u003Cdiv class=\"mcard card\" id=\"step1\"\u003E\u003Ch4\u003E                مدخل\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003EPermissions او نظام الاذونات على الاندرويد مقرر لحماية معلومات المستخدمين و عرف تطورات عدة من اندرويد الفا وصولا الى اول نسخة\u003Cbr \/\u003E\n                من مارشميلو او ما يسمى بلغة مطوري اندرويد API 23 و مند ذلك الحين قسمت الاذونات الى قسمين الاول \u003Ca href=\"https:\/\/developer.android.com\/guide\/topics\/permissions\/overview#dangerous_permissions\" rel=\"nofollow\" target=\"_blank\"\u003Eاذونات خطيرة \u003C\/a\u003Eو \u003Ca href=\"https:\/\/developer.android.com\/guide\/topics\/permissions\/overview#normal_permissions\" rel=\"nofollow\" target=\"_blank\"\u003Eاذونات                عادية\u003C\/a\u003E و اقسام اخرى لا دخل لنا بها اليوم . \u003C\/div\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjnW-Q5eva4PZxhWCzumH32RhZb9Unj3GYRLiDNPtnghKudwu3U5tZR6ZB4F-nEz86kSjsvDJVs3NEsfOA9OYVymOAR1Dgz00Z_HrnjlkSYGXPKLHJpnN3jscw1BwoWlZIto-cRwbsNqGY\/s1600\/odonat.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjnW-Q5eva4PZxhWCzumH32RhZb9Unj3GYRLiDNPtnghKudwu3U5tZR6ZB4F-nEz86kSjsvDJVs3NEsfOA9OYVymOAR1Dgz00Z_HrnjlkSYGXPKLHJpnN3jscw1BwoWlZIto-cRwbsNqGY\/s320\/odonat.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eليس هذا التقسيم الوحيد فهناك ايضا تقسيمات اخرى اوذنات اثناء تنصيب التطبيق install-time و اذونات اثناء فتح التطبيق Runtime،\u003Cbr \/\u003E\n                و العلاقة بينهما ان الاذونات العادية تظهر اثناء التنصيب و لا تحتاج الى طلب اثناء تشغيل التطبيق في حيت ان\u003Cbr \/\u003E\n                الاذونات الخطيرة تحتاج الى طلب اذن اثناء التشغيل .\u003Cbr \/\u003E\n                \u003Cbr \/\u003E\u003Cbr \/\u003E\nعلى اليمين اذونات\u0026nbsp; install time و على اليسار اذونات Runtime .\u003C\/div\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiQeW4knMI9RYbWLPPOXGhwwFyP5kwPUzKYlqtgNOi0lfwqfrV6jpvhpekpllw-l0NQ157PSV4FtnSKEqjbPgz0QctB8MjJXQiZ3MRVMTochxrUXZLAJcfqEplIQO_uGQVOFeqH-iG3g3s\/s1600\/4FHva.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cbr \/\u003E\n                    \u003Cimg alt=\"اذونات  install time\" border=\"0\" data-original-height=\"1142\" data-original-width=\"638\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiQeW4knMI9RYbWLPPOXGhwwFyP5kwPUzKYlqtgNOi0lfwqfrV6jpvhpekpllw-l0NQ157PSV4FtnSKEqjbPgz0QctB8MjJXQiZ3MRVMTochxrUXZLAJcfqEplIQO_uGQVOFeqH-iG3g3s\/s320\/4FHva.png\" title=\"اذونات  install time\" width=\"178\" \/\u003E\u003Cbr \/\u003E\n                \u003C\/a\u003E\u003Cbr \/\u003E\n                \u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEih8OG9CjnW9yVMLRlzmJHiOW9A2DuSm0_5gRCKfPKmth4HJOr5TvY0GNEQ6688sVV067JWtUCdJAiv8tnTVUwRmRl1zDzSOAmjtBut3tblPhbrXeqlejzz7UxhMzq81OUdsfy26ixtPTM\/s1600\/Marshmallow-permission-2.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cbr \/\u003E\n                    \u003Cimg alt=\"  اذونات Runtime .\" border=\"0\" data-original-height=\"711\" data-original-width=\"400\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEih8OG9CjnW9yVMLRlzmJHiOW9A2DuSm0_5gRCKfPKmth4HJOr5TvY0GNEQ6688sVV067JWtUCdJAiv8tnTVUwRmRl1zDzSOAmjtBut3tblPhbrXeqlejzz7UxhMzq81OUdsfy26ixtPTM\/s320\/Marshmallow-permission-2.png\" title=\"  اذونات Runtime .\" width=\"180\" \/\u003E\u003Cbr \/\u003E\n                \u003C\/a\u003E\u003Cbr \/\u003E\n            \u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003E\u0026nbsp;ابرز الاذونات العادية(اوذنات اثناء تنصيب التطبيق) : الشبكات(الويفي بلوتوت انترنيت ....) ، الهزاز ،تغيير الخلفية ...\u003Cbr \/\u003E\n                . ابرز الاذونات الخطيرة(اوذنات اثناء فتح التطبيق) :الكاميرا ، ارقام الهواتف ،الموقع الجغرافي ،الذاكرة، الميكروفون\u003Cbr \/\u003E\n                ، الرسائل،المستشعر .\u003C\/div\u003E\u003Cdiv class=\"caution\"\u003Eتجدر الاشارة الى انك اذا قررت استعمال الاذونات الخطيرة دون اذن فستحصل على \u003Ca href=\"https:\/\/developer.android.com\/reference\/java\/lang\/SecurityException.html\" rel=\"nofollow\" target=\"_blank\"\u003Esecuirity Execption\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step2\"\u003E\u003Ch4\u003E                قبل اندرويد ماشميلو API 23\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eحسنا قبل الاندرويد مارشميلو الفاسق الفاجر ، كانت الامور على ما يرام ، مجرد اضافة سطر واحد الى ملف manifest يجعلك تستمتع بالوصول\u003Cbr \/\u003E\n                الى الكاميرا مثلا اعرف ما يجول في راسك الان اتقي الله يا صديقي 😂 دعني اريك الكود و قبل ذلك فليس هناك بين\u003Cbr \/\u003E\n                الاذونات الخطيرة او العادية فرق الكل عادي.\u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiQeW4knMI9RYbWLPPOXGhwwFyP5kwPUzKYlqtgNOi0lfwqfrV6jpvhpekpllw-l0NQ157PSV4FtnSKEqjbPgz0QctB8MjJXQiZ3MRVMTochxrUXZLAJcfqEplIQO_uGQVOFeqH-iG3g3s\/s1600\/4FHva.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1142\" data-original-width=\"638\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiQeW4knMI9RYbWLPPOXGhwwFyP5kwPUzKYlqtgNOi0lfwqfrV6jpvhpekpllw-l0NQ157PSV4FtnSKEqjbPgz0QctB8MjJXQiZ3MRVMTochxrUXZLAJcfqEplIQO_uGQVOFeqH-iG3g3s\/s320\/4FHva.png\" width=\"178\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab2\"\u003Exml\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab2\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-xml\"\u003E\u0026lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n              package=\"com.example.snazzyapp\"\u0026gt;\n    \n        \u0026lt;uses-permission android:name=\"android.permission.SEND_SMS\"\/\u0026gt;\n    \n        \u0026lt;application ...\u0026gt;\n            ...\n        \u0026lt;\/application\u0026gt;\n    \u0026lt;\/manifest\u0026gt;\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eتهانينا لقد حصلت لتوك على اذن للوصول الى الرسائل و ارسالها ايضا جميل اليس كذلك؟ الامر اشبه لما هو موجود بالاعلى يظهر تطبيقك بقائمة الاذونات التي يحتاجها اثناء التنصيب في الوليبوب\u003Cbr \/\u003E\n                مثلا .\u003Cbr \/\u003E\n            \u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eسبق و ذكرت ان انظمة اندرويد الاقل من API 23 تحتاج الى طلب اذن اثناء التنصيب فقط اما بعد ذلك فلا .\u003Cbr \/\u003E\n            \u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step3\"\u003E\u003Ch4\u003E                اندرويد ماشميلو API 23 و ما بعده\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\nالحال هنا مختلفة قليلا او كثيرا و طلب الاذن يمر من خمس مراحل يسعدني ذكرها لكم و شرحها\u003Cbr \/\u003E\u003Cbr \/\u003E\nقبل ذلك فهنا اتى تقسيم الاذونات الى\u003Cbr \/\u003E\n                خطيرة التي تحتاج الى اتباع هذه الخطوات و اخرى عادية لا تختلف عن سابقاتها .\u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh1HxKX7q2c23wW1j5l4EwgYKmdUhSGInslpVQ25yynBrlNOUrtGmGOje3Zs30zgguMs2YCiV4GRJuDNruk1MkgH_IKD5qYClyZxXe9DzfUg-uXGT3uPkUcPNXhzzW98bRknLcwTLSmdys\/s1600\/Marshmallow-permission-2.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"170\" data-original-width=\"353\" height=\"153\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh1HxKX7q2c23wW1j5l4EwgYKmdUhSGInslpVQ25yynBrlNOUrtGmGOje3Zs30zgguMs2YCiV4GRJuDNruk1MkgH_IKD5qYClyZxXe9DzfUg-uXGT3uPkUcPNXhzzW98bRknLcwTLSmdys\/s320\/Marshmallow-permission-2.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cul class=\"mdraggable checklist\"\u003E\u003Cli\u003E التحقق من النظام \u003C\/li\u003E\n\u003Cli\u003E التحقق من الاذن \u003C\/li\u003E\n\u003Cli\u003E لماذا تحتاج الى الاذن \u003C\/li\u003E\n\u003Cli\u003E طلب الاذن \u003C\/li\u003E\n\u003Cli\u003E نتيجة الطلب \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"mdraggable\"\u003Eلازلت مجبرا على اضافة طلب الاذن في ملف manifest بعد ان تضيفه قم بتتبع الخطوات التالية .\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step4\"\u003E\u003Ch4\u003E                الخطوة الاولى : التحقق من النظام\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eبما ان طلب الاذن لا يوجد الا في اندرويد مارشميلو 6.0 و ما بعده فنحن لسنا بحاجة الى طلبه في ما قبل هذا النظام كالولي بوب 5.0\u003Cbr \/\u003E\n                مثلا .\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eطريقة التحقق :\u003C\/b\u003E\u003Cbr \/\u003E\n            \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab3\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab4\"\u003Ejava\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab3\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eif (Build.VERSION.SDK_INT\u0026gt;=23){\n        \/\/المرحلة الثانية التحقق من الاذن\n    }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab4\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003Eif (Build.VERSION.SDK_INT\u0026gt;=23){\n        \/\/المرحلة الثانية التحقق من الاذن\n    }\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eتجدر الاشارة الى ان تطبيق سيتوقف في الاصدارات القديمة اذا تجاوزت هذه الخطوة .\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step5\"\u003E\u003Ch4\u003E                الخطوة الثانية : التحقق من الاذن\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eاولا نحتاج الى ان تحقق من ان المستخدم لم يقم سابقا باعطائنا الاذن تجدر الاشارة الى ان المستخدم يستطيع التراجع عن الاذن من\u003Cbr \/\u003E\n                خلال الاعدادات لهذا يجب التحقق في كل مرة تحتاج فيها الى هذا الاذن خلاصة القول لا تستعمل shared preference\u003Cbr \/\u003E\n                .\u003Cbr \/\u003E\n            \u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab5\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab6\"\u003Ejava\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab5\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eif (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)\n            != PackageManager.PERMISSION_GRANTED) {\n        \/\/ لم تحصل على اي اذن\n    }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab6\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003Eif (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)\n            != PackageManager.PERMISSION_GRANTED) {\n        \/\/ لم تحصل على اي اذن\n    }\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step6\"\u003E\u003Ch4\u003E                الخطوة التالثة : طلب الاذن\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eحسنا ان حصلنا على الاذن فهذا جيد لكن ان لم نحصل على الاذن فهنا نحتاج الى طلبه من المستخدم من خلال نافدة منبتقة و لاضهار هذه\u003Cbr \/\u003E\n                النافدة نحتاج الى الكود التالي :\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab7\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab8\"\u003Ejava\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab7\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eif (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)\n            != PackageManager.PERMISSION_GRANTED) {\n    \n        \/\/ لم تحصل على الاذن\n        \/\/طلب الاذن\n        ActivityCompat.requestPermissions(context,\n            arrayOf(Manifest.permission.READ_CONTACTS), RESULTCODE)\n    } else {\n        \/\/ ثم الحصول على الاذن سابقا\n    }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab8\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-java\"\u003Eif (ContextCompat.checkSelfPermission(context,\n            Manifest.permission.READ_CONTACTS)\n            != PackageManager.PERMISSION_GRANTED) {\n    \n        \/\/ لم تحصل على الاذن\n        \/\/طلب الاذن\n            ActivityCompat.requestPermissions(context,\n                    new String[]{Manifest.permission.READ_CONTACTS},RESULTCODE);\n    } else {\n        \/\/ ثم الحصول على الاذن سابقا\n    }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eماذا يعني RESULTCODE :\u003C\/b\u003E\u003Cbr \/\u003E\n                \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mdraggable\"\u003Eعبارة عن رقم تابث محدد و معروف يمكن المطور من معرفة النتيجة التي ثم ارجاعها من نافدة غير تابعة للتطبيق و هذا في حالة تعدد\u003Cbr \/\u003E\n                    الطلبات .\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step7\"\u003E\u003Ch4\u003E                الخطوة الرابعة : لماذا نحتاج الاذن \u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eاحيانا يقوم المستخدم برفض الطلب بكل وقاحة و لا يتفهم ان هذا من مصلحته و الان في حالة الرفض ستبين له لماذا فعلا يحتاج الى\u003Cbr \/\u003E\n                اعطائك هذا الاذن مثلا في حالة كان لديك تطبيق قراءة الكتب و اردت الوصول الى الكاميرا قد يتسائل المستخدم لماذا\u003Cbr \/\u003E\n                يحتاج التطبيق الى الكاميرا انذاك تخبره بان التطبيق يستطيع تحديد الكتاب من الصورة و قراءته لك .\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eكيف يتم ذلك\u003C\/b\u003E\u003Cbr \/\u003E\n            \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mdraggable\"\u003Eفي اول طلب لك تظهر للمستخدم هذه النافذة المنبتقة : بها زرا الموافقة و الرفض و ايقونة و ايضا الخاصية التي تريد الوصول اليها\u003Cbr \/\u003E\n                .\u003Cbr \/\u003E\n            \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh1HxKX7q2c23wW1j5l4EwgYKmdUhSGInslpVQ25yynBrlNOUrtGmGOje3Zs30zgguMs2YCiV4GRJuDNruk1MkgH_IKD5qYClyZxXe9DzfUg-uXGT3uPkUcPNXhzzW98bRknLcwTLSmdys\/s1600\/Marshmallow-permission-2.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"170\" data-original-width=\"353\" height=\"153\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh1HxKX7q2c23wW1j5l4EwgYKmdUhSGInslpVQ25yynBrlNOUrtGmGOje3Zs30zgguMs2YCiV4GRJuDNruk1MkgH_IKD5qYClyZxXe9DzfUg-uXGT3uPkUcPNXhzzW98bRknLcwTLSmdys\/s320\/Marshmallow-permission-2.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eفي حالة الرفض يتم اضهار النافذة المنبتقة مرة اخرى : بها زرا الموافقة و الرفض و ايقونة و ايضا الخاصية التي تريد الوصول اليها\u003Cbr \/\u003E\n                لكن هذه المرة يضاف اليها checkBox و امامها لا تسال مجددا هنا لهذا قبل اضهارها مجددا تحتاج الى اقناع المستخدم\u003Cbr \/\u003E\n                باعطائك للاذن و الا فلن تستطيع طلبه مجددا .\u003Cbr \/\u003E\n            \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhUxNiPVxz8M4NjPggi1Hs7179VZBSx54JNAQ89Z7yNDq6zwMEBtw1ARZBV-Kx84U2pDfqnHAm86l69TV_oKIgf3UMWOB6ViudCX_3a678LlefNAHtconx0HoDNrUzGsr12LR9q9l73SK0\/s1600\/images.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"193\" data-original-width=\"262\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhUxNiPVxz8M4NjPggi1Hs7179VZBSx54JNAQ89Z7yNDq6zwMEBtw1ARZBV-Kx84U2pDfqnHAm86l69TV_oKIgf3UMWOB6ViudCX_3a678LlefNAHtconx0HoDNrUzGsr12LR9q9l73SK0\/s1600\/images.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eارني الكود :\u003C\/b\u003E\u003Cbr \/\u003E\n            \u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab9\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab10\"\u003Ejava\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab9\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eif (ContextCompat.checkSelfPermission(context,\n                            Manifest.permission.READ_CONTACTS)\n                    != PackageManager.PERMISSION_GRANTED) {\n    \n                \/\/ لم تحصل على الاذن\n                \/\/ هل نحتاج الى شرح سبب الطلب\n                if (ActivityCompat.shouldShowRequestPermissionRationale(context,\n                                Manifest.permission.READ_CONTACTS)) {\n                    \/\/ اضهر الشرح للمستخدم\n                    \/\/ بعد رؤية المستخدم للشرح\n                    \/\/ سيتم اظهار الطلب مجددا\n                    Toast.makeText(context,\"انا مسكين و احتاج الى ارقام الهاتف لبيعها\",Toast.LENGTH_LONG).show()\n                } else {\n                    \/\/ لا حاجة للشرح هذه اول مرة\n                    ActivityCompat.requestPermissions(context,\n                            arrayOf(Manifest.permission.READ_CONTACTS), RESULTCODE)\n                    \n                }\n            } else {\n                \/\/ حصلت على الاذن سابقا\n            }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab10\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-java\"\u003Eif (ContextCompat.checkSelfPermission(context,\n                            Manifest.permission.READ_CONTACTS)\n                    != PackageManager.PERMISSION_GRANTED) {\n    \n                \/\/ لم تحصل على الاذن\n                \/\/ هل نحتاج الى شرح سبب الطلب\n                if (ActivityCompat.shouldShowRequestPermissionRationale(context,\n                                Manifest.permission.READ_CONTACTS)) {\n                    \/\/ اضهر الشرح للمستخدم\n                    \/\/ بعد رؤية المستخدم للشرح\n                    \/\/ سيتم اظهار الطلب مجددا\n                    Toast.makeText(context,\"انا مسكين و احتاج الى ارقام الهاتف لبيعها\",Toast.LENGTH_LONG).show();\n                } else {\n                    \/\/ لا حاجة للشرح هذه اول مرة\n                    ActivityCompat.requestPermissions(context,\n                            new String[]{Manifest.permission.READ_CONTACTS}, RESULTCODE);\n                    \n                }\n            } else {\n                \/\/ حصلت على الاذن سابقا\n            }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step8\"\u003E\u003Ch4\u003E                الخطوة الاخيرة : نتيجة الاذن \u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eحسنا قد يتسائل سائل كيف اعرف اذا ما رفض الطلب او لا لآباشر الوصول الى الخاصية او اعيد الطلب حسنا كل هذا من خلال دالة onRequestPermissionsResult\u003Cbr \/\u003E\n                و هي عبارة عن انترفييس للاكتفيتي حسنا هكذا سيكون الكود :\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab11\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab12\"\u003Ejava\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab11\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E override fun onRequestPermissionsResult(requestCode: Int,\n                                                permissions: Array\u0026lt;string\u0026gt;, grantResults: IntArray) {\n            when (requestCode) {\n                RESULTCODE -\u0026gt; {\n                    \/\/ في حالة الرفض\n                    \/\/permissions سيكون فارغ\n                    if ((grantResults.isNotEmpty() \u0026amp;\u0026amp; grantResults[0] == PackageManager.PERMISSION_GRANTED)) {\n                        \/\/ ثم منحك الاذن \n                        \/\/ يمكنك بيع ارقام الهاتف ولتصبح غنيا\n                        \/\/ sellContacts()\n                    } else {\n                        \/\/ ثم رفض الطلب للاسف\n                    }\n                    return\n                }\n    \n                else -\u0026gt; {\n                    \/\/ لا شيء\n                }\n            }\n        }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-java\"\u003E @Override\n        public void onRequestPermissionsResult(int requestCode,\n                                                String permissions[], int[] grantResults) {\n            switch (requestCode) {\n                case RESULTCODE :{\n                    \/\/ في حالة الرفض\n                    \/\/permissions سيكون فارغ\n                    if ((grantResults.length \u0026gt; 0 \u0026amp;\u0026amp; grantResults[0] == PackageManager.PERMISSION_GRANTED)) {\n                        \/\/ ثم منحك الاذن \n                        \/\/ يمكنك بيع ارقام الهاتف ولتصبح غنيا\n                        \/\/ sellContacts() hhhh\n                    } else {\n                        \/\/ ثم رفض الطلب للاسف\n                    }\n                    return;\n                }\n    \n                default : {\n                    \/\/ لا شيء\n                }\n            }\n        }\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mcard card\" id=\"step9\"\u003E\u003Ch4\u003E                الكود الكامل\u003C\/h4\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab13\"\u003Ekotlin\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Cbr \/\u003E\n                        \u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=1585447129448228537#tab14\"\u003Eالنتيجة\u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv id=\"tab13\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eclass MainActivity : AppCompatActivity() {\n        val RESULTCODE=1\n        lateinit var btn:Button\n        override fun onCreate(savedInstanceState: Bundle?) {\n            super.onCreate(savedInstanceState)\n            btn=Button(this)\n            btn.apply {\n                text=\"get Permission\"\n                setOnClickListener{\n                    if (Build.VERSION.SDK_INT\u0026gt;=23) checkPer()\n                }\n            }\n            setContentView(btn)\n    \n        }\n        fun checkPer(){\n            if (ContextCompat.checkSelfPermission(this,\n                            Manifest.permission.READ_CONTACTS)\n                    != PackageManager.PERMISSION_GRANTED) {\n    \n                \/\/ لم تحصل على الاذن\n                \/\/ هل نحتاج الى شرح سبب الطلب\n                if (ActivityCompat.shouldShowRequestPermissionRationale(this,\n                                Manifest.permission.READ_CONTACTS)) {\n                    \/\/ اضهر الشرح للمستخدم\n                    \/\/ بعد رؤية المستخدم للشرح\n                    \/\/ سيتم اظهار الطلب مجددا\n                    val snackbar = Snackbar.make(btn,\"انا مسكين و احتاج الى ارقام الهاتف لبيعها\" , Snackbar.LENGTH_INDEFINITE)\n                    snackbar.setAction(\"حسنا\") {\n                        ActivityCompat.requestPermissions(this,\n                                arrayOf(Manifest.permission.READ_CONTACTS), RESULTCODE)\n                    }\n                    snackbar.show()\n                } else {\n                    \/\/ لا حاجة للشرح هذه اول مرة\n                    ActivityCompat.requestPermissions(this,\n                            arrayOf(Manifest.permission.READ_CONTACTS), RESULTCODE)\n    \n                }\n            } else {\n                Toast.makeText(this,\"حصلت على الاذن\",Toast.LENGTH_LONG).show()\n            }\n        }\n        override fun onRequestPermissionsResult(requestCode: Int,\n                                                permissions: Array\u0026lt;string\u0026gt;, grantResults: IntArray) {\n            when (requestCode) {\n                RESULTCODE -\u0026gt; {\n                    \/\/ في حالة الرفض\n                    \/\/permissions سيكون فارغ\n                    if ((grantResults.isNotEmpty() \u0026amp;\u0026amp; grantResults[0] == PackageManager.PERMISSION_GRANTED)) {\n                        \/\/ ثم منحك الاذن\n                        \/\/ يمكنك بيع ارقام الهاتف ولتصبح غنيا\n                        \/\/ sellContacts()\n                    } else {\n                        \/\/ ثم رفض الطلب للاسف\n                        checkPer()\n                    }\n                    return\n                }\n    \n                else -\u0026gt; {\n                    \/\/ لا شيء\n                }\n            }\n        }\n    }\n    \u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab14\"\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhG4aSPn5dVTwFF8gRKGp3AFGxtBArbg2tQYm1cCnY12hZ3jR-4ogf2il2JNt_4xxVxDfaGWXK2KgSn-7YRPYfDHqVAWHK2r6-_gRLPY2j5cwnCujQ9GTtMsmYoHeQ2yFNAw5lwAfWoDz4\/s1600\/permssion.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cbr \/\u003E\n                            \u003Cimg border=\"0\" data-original-height=\"1600\" data-original-width=\"800\" height=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhG4aSPn5dVTwFF8gRKGp3AFGxtBArbg2tQYm1cCnY12hZ3jR-4ogf2il2JNt_4xxVxDfaGWXK2KgSn-7YRPYfDHqVAWHK2r6-_gRLPY2j5cwnCujQ9GTtMsmYoHeQ2yFNAw5lwAfWoDz4\/s400\/permssion.gif\" width=\"200\" \/\u003E\u003Cbr \/\u003E\n                        \u003C\/a\u003E\u003Cbr \/\u003E\n                    \u003C\/div\u003Eالمصادر :\u003Cbr \/\u003E\u003Cbr \/\u003E\n\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/developer.android.com\/guide\/topics\/permissions\/overview\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/developer.android.com\/guide\/topics\/permissions\/overview\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/developer.android.com\/training\/permissions\/requesting#java\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/developer.android.com\/training\/permissions\/requesting#java\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/933435869481189108\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/blog-post.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/933435869481189108"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/933435869481189108"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/blog-post.html","title":"الحصول على الاذونات في الاندرويد الجزء الاول"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjnW-Q5eva4PZxhWCzumH32RhZb9Unj3GYRLiDNPtnghKudwu3U5tZR6ZB4F-nEz86kSjsvDJVs3NEsfOA9OYVymOAR1Dgz00Z_HrnjlkSYGXPKLHJpnN3jscw1BwoWlZIto-cRwbsNqGY\/s72-c\/odonat.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-6225771560310794956"},"published":{"$t":"2018-06-23T16:35:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.851-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"أندرويد"}],"title":{"type":"text","$t":"التعرف على الداتا كلاس في كل من جافا و كوتلن"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cscript\u003E$(document).ready(function () {addSteps('[\"مدخل الـــــــــــــــــــــــــــــــــــــى الدتا كلاس\",\"مكونات الدتا كلاس\",\"الدتا كلاس جافا\/كوتلن\",\"الوصول الى القيم في الدتا كلاس\",\"كوتلن و الدتا كلاس\",\"خلاصة + مصادر\"]');});\u003C\/script\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mcontent\"\u003E\u003Cdiv class=\"card mcard\" id=\"step2\"\u003E\u003Ch4\u003Eمدخل الـــــــــــــــــــــــــــــــــــــى الدتا كلاس\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eحسنا مثل هذه الدروس سنقدمها من وقت الى اخر للتعريف و شرح المفاهيم الصعبة او الرائجة في كوتلن او اندرويد و من المفاهيم الرائجة في الكوتلن بل الاكثر شهرة على الاطلاق لدى كوتلن و هو الداتا كلاس او data class حيث استطاعت بهذه الخاصية اكتساح جافا و اجبرت العديد من المبرمجين الى التوبة و استعمال كوتلن .\u003C\/div\u003E\u003Cbr \/\u003E\n\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgNsi3iKMPkN5148KiT4ymoBqga-mNymGRBlhr2UKv41r9ldQvQ3-xg69_B53w-tpkFxIoSaD8Ru6768h7HzojyxXDDMoOQJ0XGOEmKCki-P6QwuESd9YfwZtFxDWhgFJtlDgSQ4ZAcm3o\/s1600\/dataclass.png\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg alt=\"التعرف على الداتا كلاس في كل من جافا و كوتلن\" border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgNsi3iKMPkN5148KiT4ymoBqga-mNymGRBlhr2UKv41r9ldQvQ3-xg69_B53w-tpkFxIoSaD8Ru6768h7HzojyxXDDMoOQJ0XGOEmKCki-P6QwuESd9YfwZtFxDWhgFJtlDgSQ4ZAcm3o\/s320\/dataclass.png\" title=\"التعرف على الداتا كلاس في كل من جافا و كوتلن\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\n\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003Edsafgasfgasfgas\u003C\/td\u003E\u003C\/tr\u003E\n\u003C\/tbody\u003E\u003C\/table\u003E\u003Cb class=\"mdraggable\"\u003Eما هو الدتا كلاس data class\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mdraggable\"\u003Eكلاس كغيره من الكلاسات لكن يتميز انه يستطيع تخزين اي شيء ليكون التواصل سهل بين مختلف الملفات الموجودة لديك في اكتفيتي مثلا فيمكنك تخزين قيم به في الاكتفيتي و الحصول عليها في adapter اكثرنا من الكلام لنرى الكود.\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard\" id=\"step2\"\u003E\u003Ch4\u003Eمكونات الدتا كلاس\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eسابقا في الجافا كانت لدينا العديد المفاهيم لانشاء data class عكس كوتلن عموما الامر لم يتغير مع الكوتلن لكن هنا انت لن تتكفل بالامر بل الكومباير هو من سيتكفل بالامر كله ، لكن دعنا نرى اولا هذه المكونات على سبيل الانتفاع فقط :\u003C\/div\u003E\u003Cul class=\"mdraggable checklist\"\u003E\u003Cli\u003E constructor  \u003C\/li\u003E\n\u003Cli\u003E متغيرات لتخزين القيم \u003C\/li\u003E\n\u003Cli\u003E دوال تخزين\/اخد القيمGetter and setter \u003C\/li\u003E\n\u003Cli\u003E hashCode(), equals() and toString() functions \u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"mdraggable\"\u003Eالان يمكنك رؤية الفرق الشاسع بين جافا و كوتلن في ما يخص الدتـــــا كـــلاس\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard\" id=\"step3\"\u003E\u003Ch4\u003Eالدتا كلاس جافا\/كوتلن\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eبمجرد ان رايت كود الجافا ظننت انه كود لتحرير فلسطين او ملف سكريبت لاختراق انظمة FBI لكن صدمت انه مجرد داتا كلاس😂 ساقوم بانشاء داتا كلاس يحمل اسم اللعبة و اسم الناشر و التقييم و هو ماخود من المصدر الاول في اخر التدوينة .\u003Cbr \/\u003E\nshow me the code\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab1\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab2\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"col s12\" id=\"tab1\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-java\"\u003E\/\/تحرير فلسطين\npublic class VideoGame {\n\n    private String name;\n    private String publisher;\n    private int reviewScore;\n\n    public VideoGame(String name, String publisher, int reviewScore) {\n        this.name = name;\n        this.publisher = publisher;\n        this.reviewScore = reviewScore;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public String getPublisher() {\n        return publisher;\n    }\n\n    public void setPublisher(String publisher) {\n        this.publisher = publisher;\n    }\n\n    public int getReviewScore() {\n        return reviewScore;\n    }\n\n    public void setReviewScore(int reviewScore) {\n        this.reviewScore = reviewScore;\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (o == null || getClass() != o.getClass()) return false;\n\n        VideoGame that = (VideoGame) o;\n\n        if (reviewScore != that.reviewScore)\n            return false;\n        if (name != null ? !name.equals(that.name) :\n                that.name != null) {\n            return false;\n        }\n        return publisher != null ?\n                publisher.equals(that.publisher) :\n                that.publisher == null;\n\n    }\n\n    @Override\n    public int hashCode() {\n        int result = name != null ? name.hashCode() : 0;\n        result = 31 * result + (publisher != null ?\n                publisher.hashCode() : 0);\n        result = 31 * result + reviewScore;\n        return result;\n    }\n\n    @Override\n    public String toString() {\n        return \"VideoGame{\" +\n                \"name='\" + name + '\\'' +\n                \", publisher='\" + publisher + '\\'' +\n                \", reviewScore=\" + reviewScore +\n                '}';\n    }\n}\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv class=\"col s12\" id=\"tab2\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\/\/لتوك ، قمت باختصار 49 سطرا\ndata class VideoGame(val name: String, val publisher: String, var reviewScore: Int)\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"mdraggable\"\u003Eللامانة ما رايته من اختصار في الكوتلن فهو لا يختلف عن جافا لان الكومبايلر سيحول الكود المتكون من سطر واحد الى 50 سطر ياخد بعين الاعتبار ان الكود في apk ليس جافا و لا كوتلن بل هو byte code .\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard\" id=\"step4\"\u003E\u003Ch4\u003Eالوصول الى القيم في الدتا كلاس\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eلم يتوقف الامر هنا بل حتى الوصول الى الدتا كلاس اصبح اسهل مع كوتلن .\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab3\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\n\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab4\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"col s12\" id=\"tab3\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-java\"\u003E\/\/تخزين قيمة\nVideoGame game = VideoGame(\"Gears of War\", \"Epic Games\", 8);\n\n\/\/تغيير قيمة \ngame.setName(\"God of War\");\ngame.setReviewScore(9);\n\n\/\/الوصول الى قيمة\nSystem.out.print(game.getName()); \/\/سيطبع God of War\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv class=\"col s12\" id=\"tab4\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\/\/تخزين قيمة\nval game = VideoGame(\"Gears of War\", \"Epic Games\", 8)\n\n\/\/تغيير قيمة \ngame.name=\"God of War\"\ngame.reviewScore =9\n\n\/\/الوصول الى قيمة\nprint(game.name) \/\/سيطبع God of War\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard\" id=\"step5\"\u003E\u003Ch4\u003Eكوتلن و الدتا كلاس\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eخصائص كوتلن جعلت التعامل مع الدتا كلاس اسهل واسهل نذكر بعضها على سبيل المثال لا الحصر  .\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eالقراءة فقط\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mdraggable\"\u003Eهذا يعنى ان القيم لا يمكن تغيرها بعد تخزين قيمة بها و اليك مثلا :\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab5\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"col s12\" id=\"tab5\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\/\/يمكن تغيير اسم اللعبة لكن لا يمكن تغيير اسم الناشر\ndata class VideoGame(var name: String, val publisher: String)\n\/\/مسموح\ngame.name=\"God of War\"\n\/\/غير مسموح\ngame.publisher=\"other one\"\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eالوصول لقيمة من خلال index\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"mdraggable\"\u003Eربما تحتاج الى الوصول الى القيمة التانية او الثالتة لكن انت لا تعرف اسم القيم لهذا يمكنك الوصول عن طريق index الخاص به باضافة دالة ()component1 :\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab6\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"col s12\" id=\"tab6\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Egame.component1() \/\/الاسم\ngame.component2() \/\/ الناشر\ngame.component3() \/\/ النقاط\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eخاصية اخرى\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"https:\/\/www.blogger.com\/blogger.g?blogID=8402909723405438809#tab7\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\u003Cdiv class=\"col s12\" id=\"tab7\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003Eval game: VideoGame = VideoGame(\"Gears of War\", \"Epic Games\", 8)\n\nval (theName, thePublisher, theReviewScore) = game\n\n\/\/ المتغيرات الثالتة ستحمل قيم الداتا كلاس على التوالي\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard\" id=\"step6\"\u003E\u003Ch4\u003Eخلاصة + مصادر\u003C\/h4\u003E\u003Cdiv class=\"mdraggable\"\u003Eلعل العديد من المبرمجين يعتمدون على جافا و ايضا العديد منهم انتقل الى كوتلن بين هذا و ذاك الاف الاسطر البرمجية التي يمكن ان تاخرك اياما بل حتى سنوات او اعوام ضوئية 😂 لذا اغتنم الفرصة و تعلم كوتلن فان تعلمها اختصار للوقت و ليس مضيعة للوقت.\u003C\/div\u003E\u003Cb class=\"mdraggable\"\u003Eالمصادر\u003C\/b\u003E\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/medium.com\/@DarrenAtherton\/intro-to-data-classes-in-kotlin-7f956d54365c\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/medium.com\/@DarrenAtherton\/intro-to-data-classes-in-kotlin-7f956d54365c\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/kotlinlang.org\/docs\/reference\/data-classes.html\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/kotlinlang.org\/docs\/reference\/data-classes.html\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cscript\u003E\n$(document).ready(function(){\n    $('.tabs').tabs();\n  });\n    \n\u003C\/script\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/6225771560310794956\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/data-class.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/6225771560310794956"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/6225771560310794956"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/data-class.html","title":"التعرف على الداتا كلاس في كل من جافا و كوتلن"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgNsi3iKMPkN5148KiT4ymoBqga-mNymGRBlhr2UKv41r9ldQvQ3-xg69_B53w-tpkFxIoSaD8Ru6768h7HzojyxXDDMoOQJ0XGOEmKCki-P6QwuESd9YfwZtFxDWhgFJtlDgSQ4ZAcm3o\/s72-c\/dataclass.png","height":"72","width":"72"},"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-2570341419283072861"},"published":{"$t":"2018-06-18T05:59:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.722-07:00"},"title":{"type":"text","$t":""},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cbr \/\u003E\n\u003Cul class=\"mcontent\"\u003E\u003Cdiv class=\"card mcard\" id=\"step2\"\u003E\u003Ch4\u003Eمقدمة\u003C\/h4\u003E\u003Cdiv class=\"preparent\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#test0\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#test1\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv id=\"test0\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E@Entity\ndata class Person(@PrimaryKey(autoGenerate = true) var id:Int,\n                  @ColumnInfo(name = \"name\") var name:String,\n                  @ColumnInfo(name = \"age\")  var age:Double)\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"test1\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003Esystem.out.println(\"bad lang\")\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/ul\u003E\u003Cscript\u003E\n$('.tabs').tabs();\n\u003C\/script\u003E\u003Cbr \/\u003E\n\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/2570341419283072861\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/kotlin-java-entitydata-class.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/2570341419283072861"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/2570341419283072861"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/kotlin-java-entitydata-class.html","title":""}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-8357996730260553197"},"published":{"$t":"2018-06-17T09:03:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.894-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"design"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Library"},{"scheme":"http://www.blogger.com/atom/ns#","term":"openSource"}],"title":{"type":"text","$t":"مجموعة من المكتبات الرائعة التي و لابد انك ستحتاج احدها"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003Eسبق و تحدثنا عن العديد من المكتبات في موضوع سابق\u0026nbsp; \u003Ca href=\"http:\/\/www.androidbella.com\/2017\/08\/15library.html\" rel=\"nofollow\" target=\"_blank\"\u003Eاليك 15 مكتبة خرافية ستساعدك بالتاكيد في بناء تطبيق رائع\u003C\/a\u003E\u0026nbsp; و اليوم نعود اليكم بكم هائل من المكتبات الرائعة و التي صادفتها اما على موقعي الافضل على الانترنيت meduim او من android arsenal\u0026nbsp; و ساحاول\u0026nbsp; ان اجمع هنا وهناك و لا تنسى المصادر الموجودة اسفل هذه التدوينة للمزيد من المكتبات الخنفوشانية عموما كل هذه المكتبات تتعلق بالدزاين .\u003Cbr \/\u003E\u003Ctable align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"tr-caption-container\" style=\"margin-left: auto; margin-right: auto; text-align: center;\"\u003E\u003Ctbody\u003E\u003Ctr\u003E\u003Ctd style=\"text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEho6fiiOVzd_UReHWj3GKP8pATSHmifsrR6B5eprELHoEGQlna_iNE4SYRUNitzrKqlQyHny4DryPahRDPsoc-XDy9Q6AdPL6CPg8oOX2l9Ejv3qXsZR_Lixs1cuLq6WE93X5Gt7xvq_Bg\/s1600\/1_L1ZYl0sp0Jtbfn0IIRw12Q.jpeg\" imageanchor=\"1\" style=\"margin-left: auto; margin-right: auto;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1060\" data-original-width=\"1600\" height=\"263\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEho6fiiOVzd_UReHWj3GKP8pATSHmifsrR6B5eprELHoEGQlna_iNE4SYRUNitzrKqlQyHny4DryPahRDPsoc-XDy9Q6AdPL6CPg8oOX2l9Ejv3qXsZR_Lixs1cuLq6WE93X5Gt7xvq_Bg\/s400\/1_L1ZYl0sp0Jtbfn0IIRw12Q.jpeg\" width=\"400\" \/\u003E\u003C\/a\u003E\u003C\/td\u003E\u003C\/tr\u003E\u003Ctr\u003E\u003Ctd class=\"tr-caption\" style=\"text-align: center;\"\u003Eماخودة من موقع\u0026nbsp;\u0026nbsp;https:\/\/proandroiddev.com\u003C\/td\u003E\u003C\/tr\u003E\u003C\/tbody\u003E\u003C\/table\u003E\u003Cbr \/\u003E\u003Cb\u003E1-\u003Cspan id=\"goog_692357473\"\u003E\u003C\/span\u003E\u003Cspan id=\"goog_692357474\"\u003E\u003C\/span\u003E:\u003Ca href=\"https:\/\/github.com\/florent37\/ExpansionPanel\" rel=\"nofollow\" target=\"_blank\"\u003EExpansionPanel\u003C\/a\u003E\u0026nbsp;↜\u003C\/b\u003E\u003Cbr \/\u003Eمكتبة رائعة لعرض المحتوى بشكل منظم و رائع و جميل ايضا تتميز المكتبة بسهولة الاستخدام\u0026nbsp; كما ان المكتبة تعمل مع recyclerView .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhgDsw8iz545M2B3ajs6IAb9yPU7RvSYhCJWk3p2hHFekLsTyJXcyje21_E7CHeN1aU2GebDHJFGOv3W6eJXrmF4FcFS50eyBbKSySSgcqzTxOkuzN34X5KqgdEvGUCfWfwt3XaeZMuD-8\/s1600\/1_J7o_zt99Vch0OdjAJhL4Kw.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"480\" data-original-width=\"307\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhgDsw8iz545M2B3ajs6IAb9yPU7RvSYhCJWk3p2hHFekLsTyJXcyje21_E7CHeN1aU2GebDHJFGOv3W6eJXrmF4FcFS50eyBbKSySSgcqzTxOkuzN34X5KqgdEvGUCfWfwt3XaeZMuD-8\/s320\/1_J7o_zt99Vch0OdjAJhL4Kw.gif\" width=\"204\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cb\u003E2-\u003Ca href=\"https:\/\/github.com\/Shashank02051997\/FancyToast-Android\" rel=\"nofollow\" target=\"_blank\"\u003EFancyToast-Android\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eلا بد و ان جوجل لا تعطي اهمية للتواست فهي كما هي منذ ان عرفنا الاندرويد لانها خاصة بالمطورين فلا تهم شكلها لكن هذه المكتبة تجعل التواست بشكل جميل و ابداعي و جميل .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi6R2sqti2SqOOGUlC51JmsActtLl_sguZqu2jyjjjJQ7qVu0e4Z0mckbgG5JFT805kk1z-zAiZbm8230QFweBaVM4bH0OQ-hba1TreX6oLXVF9cb90CVwdtUB1Ff0nxpbnMH02Do04wys\/s1600\/1_xRGylM8wqFjq7IUxJOJbcQ.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1020\" data-original-width=\"1024\" height=\"318\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi6R2sqti2SqOOGUlC51JmsActtLl_sguZqu2jyjjjJQ7qVu0e4Z0mckbgG5JFT805kk1z-zAiZbm8230QFweBaVM4bH0OQ-hba1TreX6oLXVF9cb90CVwdtUB1Ff0nxpbnMH02Do04wys\/s320\/1_xRGylM8wqFjq7IUxJOJbcQ.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E3-\u003Ca href=\"https:\/\/github.com\/romandanylyk\/ChartView\" rel=\"nofollow\" target=\"_blank\"\u003EChartView\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eهذا مشروع يوضح لك كيفية استخدام canvas و valueAnimator معا لصناعة مبيان مثلا.\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cb\u003E4-\u003Ca href=\"https:\/\/github.com\/mzule\/FantasySlide\" rel=\"nofollow\" target=\"_blank\"\u003EFantasySlide\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eمكتبة رهيبة لادخال navigation drawer الى تطبيقك بطريقة رائعة و خرافية يجعل المستخدم يعشق تطبيقك .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiynPOsZdJem0owjAN3DWioHMQD_0y7nzpZVPngN8tyotKR4gZhX0I0LV2cg9XgjoYQi6OjMOZZ1VFWLugQrWgMeaBmM_z09l0_kTtneHg-oaSyqY4R9CVmrpDg3E-iW22QE2dwG4Bt5Vg\/s1600\/1_pcprXolzEzU1pX0xqnParw.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"480\" data-original-width=\"270\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiynPOsZdJem0owjAN3DWioHMQD_0y7nzpZVPngN8tyotKR4gZhX0I0LV2cg9XgjoYQi6OjMOZZ1VFWLugQrWgMeaBmM_z09l0_kTtneHg-oaSyqY4R9CVmrpDg3E-iW22QE2dwG4Bt5Vg\/s320\/1_pcprXolzEzU1pX0xqnParw.gif\" width=\"180\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cb\u003E5-\u003Ca href=\"https:\/\/github.com\/Ramotion\/circle-menu-android\" rel=\"nofollow\" target=\"_blank\"\u003Ecircle-menu-android\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eمكتبة رائعة و جميلة من Romotion و متوفرة لكل من react native و swift كما اعتدنا منها دائما الابداع .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhvpNMAxLIT9BzI6BjlI004NH4c1vW2YA3F5KRAkZRHpyG2zLBCbtAhcjxmi6X9i1_m-FobIGPRxAGbq4zHYbfiatuGU3OgzJldddYWjvE7nRmFoLUOtRZQ3VmCNWHlDX4biE2FIFNwW5A\/s1600\/1_GqXUhVlZHqNunJRpbatPnA.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"400\" data-original-width=\"533\" height=\"240\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhvpNMAxLIT9BzI6BjlI004NH4c1vW2YA3F5KRAkZRHpyG2zLBCbtAhcjxmi6X9i1_m-FobIGPRxAGbq4zHYbfiatuGU3OgzJldddYWjvE7nRmFoLUOtRZQ3VmCNWHlDX4biE2FIFNwW5A\/s320\/1_GqXUhVlZHqNunJRpbatPnA.gif\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E6-\u003Ca href=\"https:\/\/github.com\/Hitomis\/SpinMenu\" rel=\"nofollow\" target=\"_blank\"\u003ESpinMenu\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eفي الحقيقة مكتبة تسمح لك باستعمال شيء شبيه ب viewpager لكن بانميشن رائع فقط باستخذام fragment\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhCVOFguGmxtDIImxk5tpzpcuTFblNJgLJFHRPdpC9H6UoDNA44Ykn3VkXUAX0PRCI7lC3VByUztK2rK-3uCa-O1DF38PexpaKmzRjZR4eSyvEDLH0hrV5eI62DPXeNjeeZ9K6wFpl-L1I\/s1600\/1_n92MxNZJ1e5POi_T3MJQSw.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"464\" data-original-width=\"270\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhCVOFguGmxtDIImxk5tpzpcuTFblNJgLJFHRPdpC9H6UoDNA44Ykn3VkXUAX0PRCI7lC3VByUztK2rK-3uCa-O1DF38PexpaKmzRjZR4eSyvEDLH0hrV5eI62DPXeNjeeZ9K6wFpl-L1I\/s320\/1_n92MxNZJ1e5POi_T3MJQSw.gif\" width=\"186\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E7-\u003Ca href=\"https:\/\/github.com\/xmuSistone\/android-snake-menu\" rel=\"nofollow\" target=\"_blank\"\u003Eandroid-snake-menu\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eحسنا ان كان لديك تطبيق يقوم بمجموعة من الاكشنز في نافدة واحدة فيمكنك اختصارها هنا بالاضافة الى قابلية تحويلها من منطقة الى\u0026nbsp; اخرى .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfJaD9_pq94pybzvinVwZ5TnpYCN-qkv2N-fyyUg-OgGdcd9jCI5h4_utHVnpyOAH1N0Ejwk5s900h1bc0IY6IHyLwsxRLMg5f779pU3H2AZ5_rUAzCiYrk2hWqGWJPO7d7zLQ82JzHAk\/s1600\/1_BpCBRi67mX0Xgospp6Zlqg.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"481\" data-original-width=\"270\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfJaD9_pq94pybzvinVwZ5TnpYCN-qkv2N-fyyUg-OgGdcd9jCI5h4_utHVnpyOAH1N0Ejwk5s900h1bc0IY6IHyLwsxRLMg5f779pU3H2AZ5_rUAzCiYrk2hWqGWJPO7d7zLQ82JzHAk\/s320\/1_BpCBRi67mX0Xgospp6Zlqg.gif\" width=\"179\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E8-\u003Ca href=\"https:\/\/github.com\/Nightonke\/BoomMenu\" rel=\"nofollow\" target=\"_blank\"\u003EBoomMenu\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eهذه المكتبة رائعة و رهيبة من حيث اضهار المشاهد على سطح الشاشة بانميشن خرافي و اثرك لك الصورة المعبرة.\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiMdxUrJ0bqO7Rdp1H-bNeOUSpxZroW7U4y4OeTvtAsS29UI1pzevWstHvJj3-3k-7imZ3tqNFCPl2EVS5oS1U1mZE-u9TwkGGmNPPj8AEjgRHpBR5Lc3XGJJoyBQQQDyw6VvHUV5VGDmQ\/s1600\/1_OGmO-ly3k6GgF0XctpEHmg.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"480\" data-original-width=\"270\" height=\"320\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiMdxUrJ0bqO7Rdp1H-bNeOUSpxZroW7U4y4OeTvtAsS29UI1pzevWstHvJj3-3k-7imZ3tqNFCPl2EVS5oS1U1mZE-u9TwkGGmNPPj8AEjgRHpBR5Lc3XGJJoyBQQQDyw6VvHUV5VGDmQ\/s320\/1_OGmO-ly3k6GgF0XctpEHmg.gif\" width=\"180\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E9-\u003Ca href=\"https:\/\/github.com\/razerdp\/AnimatedPieView\" rel=\"nofollow\" target=\"_blank\"\u003EAnimatedPieView\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eاضهار احصائيات على شكل مبيانات ليس هذا فقط و انما بانميشن رائع .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiRCuCgaxj8bs-eGmqQRKalYeXFLG94Sxd0O7Lij_nZkv7XdzSZzuS_s3CL06W6nZTqPtn893gmx6rrlwxX77_JVEeK0H_oymlixRruwmcDk_Nn3rR3l_UOTz5Tf0YZOz3H5Ogi5W4dk-I\/s1600\/1_pJCPfwwwfTUdgGZMzFlgFw.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"306\" data-original-width=\"307\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiRCuCgaxj8bs-eGmqQRKalYeXFLG94Sxd0O7Lij_nZkv7XdzSZzuS_s3CL06W6nZTqPtn893gmx6rrlwxX77_JVEeK0H_oymlixRruwmcDk_Nn3rR3l_UOTz5Tf0YZOz3H5Ogi5W4dk-I\/s1600\/1_pJCPfwwwfTUdgGZMzFlgFw.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E10- \u003Ca href=\"https:\/\/github.com\/KieronQuinn\/PersistentSearch\" rel=\"nofollow\" target=\"_blank\"\u003EPersistentSearch\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eهذه المكتبة تخول لك البحث في List او Array بطريقة رهيبة و رائعة كما في تطبيقات جوجل .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgkX-vM03JKUdLtGRcZdUMWu2ROgcLav_3KxHxAbV_aqAXpt95VzUmvw7PzUfk0G1MvJmd66AykAYAS4-xljde-66zlHGcNmowXSbWOX_zpx7_nD12RX3inQQeaHEn5g-JyhtyVzcrZKRI\/s1600\/1_n9T-otfmRaCoFlQhf2klsw.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"400\" data-original-width=\"453\" height=\"282\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgkX-vM03JKUdLtGRcZdUMWu2ROgcLav_3KxHxAbV_aqAXpt95VzUmvw7PzUfk0G1MvJmd66AykAYAS4-xljde-66zlHGcNmowXSbWOX_zpx7_nD12RX3inQQeaHEn5g-JyhtyVzcrZKRI\/s320\/1_n9T-otfmRaCoFlQhf2klsw.gif\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cb\u003E11-\u003Ca href=\"https:\/\/github.com\/JStumpp\/awesome-android#actionbar\" rel=\"nofollow\" target=\"_blank\"\u003Eandroid awesome\u003C\/a\u003E\u0026nbsp;\u003C\/b\u003E\u003Cb\u003E↜\u003C\/b\u003E\u003Cbr \/\u003Eاندرويد الرائع(اعشق الترجمة الحرفية 😂) هو\u0026nbsp; فعلا كذلك لانه مجموعة من المكتبات لمختلف الاقسام سواءا الوجهات او الشبكات او\u0026nbsp; اي قسم اخر .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgPoycrkZfcnBIgIvLD-WEKz6vCYIc8gxMATcoNTrtGlDTMG_xZSXEqIKJzIQLlPxQiWr2CcUaZkESr6MAmWBN42IiKd4aX6h3P6yXNXGK5nN3yj5o8wvosy7rQGlfQZAqb6pvIcPCSfqk\/s1600\/awesome-android.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"328\" data-original-width=\"1014\" height=\"206\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgPoycrkZfcnBIgIvLD-WEKz6vCYIc8gxMATcoNTrtGlDTMG_xZSXEqIKJzIQLlPxQiWr2CcUaZkESr6MAmWBN42IiKd4aX6h3P6yXNXGK5nN3yj5o8wvosy7rQGlfQZAqb6pvIcPCSfqk\/s640\/awesome-android.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003Eو في الاخير اترككم مع المصادر :\u003Cbr \/\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/uxplanet.org\/\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/uxplanet.org\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/uxplanet.org\/16-android-menu-open-source-ui-animation-components-libraries-java-kotlin-9f3e54f64280\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/uxplanet.org\/16-android-menu-open-source-ui-animation-components-libraries-java-kotlin-9f3e54f64280\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/uxplanet.org\/top-15-search-github-ui-libraries-and-components-java-swift-8d7403e73aa8\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/uxplanet.org\/top-15-search-github-ui-libraries-and-components-java-swift-8d7403e73aa8\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/proandroiddev.com\/25-new-android-libraries-and-projects-to-check-at-the-beginning-of-2018-ba3b422bbbb4\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/proandroiddev.com\/25-new-android-libraries-and-projects-to-check-at-the-beginning-of-2018-ba3b422bbbb4\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/android-arsenal.com\/details\/1\/5827\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/android-arsenal.com\/details\/1\/5827\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/github.com\/JStumpp\/awesome-android\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/github.com\/JStumpp\/awesome-android\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv dir=\"ltr\" style=\"text-align: left;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/8357996730260553197\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/blog-post_17.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/8357996730260553197"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/8357996730260553197"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/blog-post_17.html","title":"مجموعة من المكتبات الرائعة التي و لابد انك ستحتاج احدها"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEho6fiiOVzd_UReHWj3GKP8pATSHmifsrR6B5eprELHoEGQlna_iNE4SYRUNitzrKqlQyHny4DryPahRDPsoc-XDy9Q6AdPL6CPg8oOX2l9Ejv3qXsZR_Lixs1cuLq6WE93X5Gt7xvq_Bg\/s72-c\/1_L1ZYl0sp0Jtbfn0IIRw12Q.jpeg","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-953277206132559729"},"published":{"$t":"2018-06-16T08:11:00.001-07:00"},"updated":{"$t":"2018-08-15T03:37:50.979-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"الالعاب"}],"title":{"type":"text","$t":"التعامل مع قواعد البيانات باستخدام روم Room Jetpack"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cdiv class=\"mcontent\"\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step1\"\u003E\u003Cscript\u003E\n                $(document).ready(function () {\n                    addSteps('[ \"مقدمة\", \"تهيئ البيئة\", \"الخطوات\",\"data class\", \"Interface\", \"Main class\", \"النتيجة\"]');\n                });\n            \u003C\/script\u003E\u003Cbr \/\u003E\n\u003Cdiv\u003E\u003Ch4\u003E1. مقدمة\u003C\/h4\u003Eحسنا عدنا الى\u0026nbsp;\u003Ca href=\"http:\/\/www.androidbella.com\/2018\/05\/android-jetpack.html\" rel=\"nofollow\" target=\"_blank\"\u003Eشروحات الترسانة JetPack\u003C\/a\u003E و هذه المرة مع\u0026nbsp;\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E لادارة قاعدة البيانات بافضل طريقة ممكنة و باقل عدد من الاخطاء قد تكون\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E السلاح الاكثر قابلية للاستعمال مع بين ترسانة\u0026nbsp;\u0026nbsp;\u003Ca href=\"http:\/\/www.androidbella.com\/2018\/05\/android-jetpack.html\" rel=\"nofollow\" target=\"_blank\"\u003EJetpack\u003C\/a\u003E اذا سبق و حصلت على العديد من الاخطاء بسبب قاعدة البيانات الحقيرة SQLite فان\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E هو الحل بدل التعامل\u0026nbsp;\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/reference\/android\/database\/Cursor\" rel=\"nofollow\" target=\"_blank\"\u003Ecursor\u003C\/a\u003E ستتعامل مع الكلاسات و هذا افضل و اسرع .\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhW7vXIdmhCtdBzNIxlwgN0h8PXa9gag5vh7dNcUt6Pwng7McFNrQry7m42r3cNTrLzHRCIhPyfgeQDyrYmsvNWJh9ymv3eVWYToVOWG54jUPJfUu5nYyt2guwigfmyqXtThZIRveYXwAc\/s1600\/Room.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhW7vXIdmhCtdBzNIxlwgN0h8PXa9gag5vh7dNcUt6Pwng7McFNrQry7m42r3cNTrLzHRCIhPyfgeQDyrYmsvNWJh9ymv3eVWYToVOWG54jUPJfUu5nYyt2guwigfmyqXtThZIRveYXwAc\/s320\/Room.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\n\u003Ch5 class=\"bold\"\u003Eما هي مميزات الروم ؟\u0026nbsp;\u003C\/h5\u003E\u003Cul class=\"checklist\"\u003E\u003Cli\u003Eلا تسمح لك روم بان ترسل استعلاما خاطئا لقاعدة البيانات فالتحقق يتم اثناء برمجة التطبيق\u003C\/li\u003E\n\u003Cli\u003Eستحتاج الى طلب او instance واحد لقاعدة البيانات\u0026nbsp; في كل التطبيق\u003C\/li\u003E\n\u003Cli\u003Eتتميز روم بالسرعة مقارنة مع\u0026nbsp;\u0026nbsp;\u003Ca href=\"https:\/\/github.com\/realm\/realm-java\/tree\/master\/examples\/kotlinExample\/src\/main\/kotlin\/io\/realm\/examples\/kotlin\/model\" rel=\"nofollow\" target=\"_blank\"\u003Erealm\u003C\/a\u003E\u003Cbr \/\u003E\n\u003C\/li\u003E\n\u003Cli\u003Eتتميز بالحجم الصغير مقارنة مع\u0026nbsp;\u0026nbsp;\u003Ca href=\"https:\/\/github.com\/realm\/realm-java\/tree\/master\/examples\/kotlinExample\/src\/main\/kotlin\/io\/realm\/examples\/kotlin\/model\" rel=\"nofollow\" target=\"_blank\"\u003Erealm\u003C\/a\u003E\u003Cbr \/\u003E\n\u003C\/li\u003E\n\u003Cli\u003Eلا يمكن الاتصال بروم من خلال thread الرئيسي و انما من خلال\u0026nbsp; thread منفصل\u003C\/li\u003E\n\u003C\/ul\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step2\"\u003E\u003Ch4 id=\"title\"\u003E2. تهيئ البيئة\u003C\/h4\u003E\u003Cdiv\u003Eقم باضافة السطرين التاليين الى ملف\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003Ebuild.gradle\u0026nbsp;\u0026nbsp;\u003Cb\u003E(Module: app)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-groovy\"\u003E\n    implementation \"android.arch.persistence.room:runtime:$rootProject.roomVersion\"\n    annotationProcessor \"android.arch.persistence.room:compiler:$rootProject.roomVersion\"\u003C\/code\u003E\u003C\/pre\u003Eوقم باضافة الكود التالي\u0026nbsp; و احصل على احدث اصدار للمكتبة\u0026nbsp;\u0026nbsp;\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/adding-components\" rel=\"nofollow\" target=\"_blank\"\u003Eمن هنا\u003C\/a\u003E\u0026nbsp;مهم جدا:\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-groovy\"\u003E\n    ext {\n       roomVersion = '1.0.0'\n       archLifecycleVersion = '1.1.0'\n    }\n    \u003C\/code\u003E\u003C\/pre\u003E\u0026nbsp;معاينة جدول قاعدة البيانات: سنقوم بانشاء جدول به\u0026nbsp; المعرف و يجب ان يكون فريد unique\u0026nbsp; و الاسم و العمر و هكذا سيكون :\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003Etable\u0026nbsp;\u0026nbsp;\u003Cb\u003ESQLite\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E+-------+--------------+------+-----+----------------+\n    | Field | Type         | Null | Key | Extra          |\n    +-------+--------------+------+-----+----------------+\n    | id    | int          | YES  | PRI | auto_increment |\n    | name  | String       | NO   |     |                |\n    | age   | String       | NO   |     |                |\n    +-------+--------------+------+-----+----------------+\n    \u003C\/pre\u003E\u003Cbr \/\u003E\n\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step3\"\u003E\u003Ch4\u003E3. حسنا الان الى التطبيق :\u003C\/h4\u003Eسنقوم بانشاء ملف كوتلن على اندرويد ستوديو باسم\u0026nbsp;\u0026nbsp;\u003Cspan style=\"font-weight: 400;\"\u003EAppDatabase\u0026nbsp;\u003C\/span\u003E سنضع فيه داتا كلاس و interface و كلاس الرئيسي لاخد طلب الوصول الى قاعدة البيانات ومن ثم سنطلب الوصول الى قاعدة البيانات من activity الخاصة بنا.\u003Cbr \/\u003E\n\u003Ch5 class=\"bold\"\u003Eالخطوات على الشكل التالي :\u003C\/h5\u003E\u003Cul class=\"checklist\"\u003E\u003Cli\u003Eانشاء داتا كلاس .\u003C\/li\u003E\n\u003Cli\u003Eانشاء واجهة او interface و التعرف على DAO@ .\u003C\/li\u003E\n\u003Cli\u003Eانشاء الكلاس الرئيسي .\u003C\/li\u003E\n\u003Cli\u003Eطلب الوصول الى قاعدة البيانات من خلال thread منفصل .\u003C\/li\u003E\n\u003Cli\u003Eطباعة النتيجة على Logger لتسهيل الامر.\u0026nbsp;\u003C\/li\u003E\n\u003C\/ul\u003E\u003Ch5 class=\"bold\"\u003Eتابع هذه الخطوات في الصفحات التالية .\u003C\/h5\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step4\"\u003E\u003Ch4\u003E4. انشاء داتا كلاس :\u003C\/h4\u003Eحسنا سنقوم بانشاء داتا كلاس(اساسيات كوتلن) و فيه سيكون المعرف\u0026nbsp; و الاسم و العمر هذا الكلاس هو الذي سيحمل البيانات سواءا عند اضافة مستخدم او ارسال استعلام فانه يعيد هذا الكلاس .\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt\u0026nbsp;\u003Cb\u003E(Data Class → Person)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\n    @Entity\n    data class Person(@PrimaryKey(autoGenerate = true) var id:Int,\n                      @ColumnInfo(name = \"name\") var name:String,\n                      @ColumnInfo(name = \"age\")  var age:Double)\n    \u003C\/code\u003E\u003C\/pre\u003E\u003Ch5 class=\"bold\"\u003Eشرح\u0026nbsp; محتوى الكلاس\u003C\/h5\u003E\u003Cul class=\"checklist\" style=\"text-align: right;\"\u003E\u003Cli\u003E@PrimaryKey : لاجل جعل المعرف خاصا\u0026nbsp;\u003C\/li\u003E\n\u003Cli\u003EautoGenerate : يعني اذا كنت تريد ملىء الحقل تلقائيا ضع true\u003C\/li\u003E\n\u003Cli\u003E@ColumnInfo : وضع اسم الحقل اذا كنت ترغب فاعطائه اسما غير الاسم الموجود في الكلاس\u003C\/li\u003E\n\u003C\/ul\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step5\"\u003E\u003Ch4\u003E5. انشاء واجهة او interface و التعرف على DAO@\u0026nbsp;\u003C\/h4\u003Eما هو DAO هو كائن object يسمح لك للتحقق من صحة الاستعلام اثناء الكومبلين\u0026nbsp; حسنا بعبارة اوضح هو للوصول الى قاعدة البيانات بامان تام من اخطاء برمجية . DAO اما ان يكون Interface او abstract\u0026nbsp; انا ساستعمل interface :\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt\u0026nbsp;\u003Cb\u003E(Interface → PersonDao)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\n    @Dao\n    interface PersonDao {\n     @Query(\"SELECT * FROM person\")\n     fun getAll(): List\u0026lt;person\u0026gt;\n    \n     @Query(\"SELECT * FROM person WHERE id IN (:userIds)\")\n     fun loadAllByIds(userIds: IntArray): List\u0026lt;person\u0026gt;\n    \n     @Query(\"SELECT * FROM person WHERE name LIKE :name LIMIT 1\")\n     fun findByName(name: String): Person\n    \n     @Insert(onConflict = REPLACE)\n     fun insertAll(vararg users: Person)\n    \n     @Delete\n     fun delete(user: Person)\n    }\n    \u003C\/code\u003E\u003C\/pre\u003Eستلاحظ انه رغم ان الاستعلامات عبارة عن String الا انه يتم التحقق من\u0026nbsp; المعلومات التي فيه . يتم استقبال القيم\u003Cbr \/\u003E\nعبر interface و يتم اخدها من الانترفيس فقط باضافة نقطتين قبل اسم المتغير .\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step6\"\u003E\u003Ch4\u003E6. انشاء الكلاس الرئيسي .\u003C\/h4\u003E\u0026nbsp;تاليا نضيف الكلاس الذي ناخد به instance من database :\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt\u0026nbsp;\u003Cb\u003E(Main Class → AppDatabase)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\n    @Database(entities = arrayOf(Person::class), version = 1)\n    abstract class AppDatabase : RoomDatabase() {\n     abstract fun userDao(): PersonDao\n    }\n    \u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step7\"\u003E\u003Ch4\u003E7. الوصول الى قاعدة البيانات\u003C\/h4\u003Eللوصول الى قاعدة البيانات\u003Cbr \/\u003E\n\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EMain.kt \u003Cb\u003E(Activity → Main)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\n    class Main : AppCompatActivity() {\n    \n     override fun onCreate(savedInstanceState: Bundle?) {\n      super.onCreate(savedInstanceState)\n      setContentView(R.layout.ac_main)\n      \/\/استخدام مكتبة انكو لتسهيل الوصول الى تريد thread منفصل\n      doAsync {\n       \/\/instance\n       val db = Room.databaseBuilder(this@Main, AppDatabase::class.java, \"database-name\").build()\n       \/\/انشاء مستحدم جديد\n       val person=Person( null, \"Ismail Bella\",  19.0)\n       \/\/اضافة المستخدم الى قاعدة البيانات من خلال interface\n       db.userDao().insertAll(person)\n       \/\/ ارسال استعلام للحصول على معلومات المستخدم المسجلة من خلال الاسم\n       val rp=db.userDao().findByName(\"Ismail Bella\")\n       \/\/طباعة عمر المستخدم على Log\n       uiThread { Log.e(\"your age\",rp.age.toString()) }\n      }\n     }\n    }\n    \u003C\/code\u003E\u003C\/pre\u003Eتجدر الاشارة الى انني استخدمت\u0026nbsp; \u0026nbsp;\u003Ca href=\"https:\/\/github.com\/Kotlin\/anko\/pulls\" rel=\"nofollow\" target=\"_blank\"\u003Eمكتبة انكو\u003C\/a\u003E للوصول الى thread منفصل\u0026nbsp; و لابد من\u0026nbsp; طلب الوصول الى قاعدة البيانات من خلال\u0026nbsp; thread منفصل .\u003Cbr \/\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaYx18GapoyluOeMWjrNBLT4TywHEoaG2vBxbjA_4f0ByB44l4lGeIs5J9rPPwRaC7laNdkJI9AiCR5dvzs-tO7zvjLApE7ocH_OJJZAlHsDMG-1wWaLQC2xJFSgLLrfdWdBnQHllyMn4\/s1600\/Screen+Shot+2018-06-15+at+10.46.45+PM.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cbr \/\u003E\n\u003Cimg alt=\"نتيجة التطبيق على Log\" border=\"0\" data-original-height=\"106\" data-original-width=\"998\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaYx18GapoyluOeMWjrNBLT4TywHEoaG2vBxbjA_4f0ByB44l4lGeIs5J9rPPwRaC7laNdkJI9AiCR5dvzs-tO7zvjLApE7ocH_OJJZAlHsDMG-1wWaLQC2xJFSgLLrfdWdBnQHllyMn4\/s1600\/Screen+Shot+2018-06-15+at+10.46.45+PM.png\" title=\"نتيجة التطبيق على Log\" \/\u003E\u003Cbr \/\u003E\n\u003C\/a\u003E\u003C\/div\u003Eالى هنا نكون قد انتهينا من درس اليوم . \u0026nbsp;المصادر :\u003Cbr \/\u003E\n\u003Cdiv style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/developer.android.com\/topic\/libraries\/architecture\/room\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/codelabs.developers.google.com\/codelabs\/android-room-with-a-view\/\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/codelabs.developers.google.com\/codelabs\/android-room-with-a-view\/\u003C\/a\u003E\u003Cbr \/\u003E\n\u003Ca href=\"https:\/\/www.youtube.com\/watch?v=IkQgQFr6xYU\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/www.youtube.com\/watch?v=IkQgQFr6xYU\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003C\/div\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/953277206132559729\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/jetpack-room.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/953277206132559729"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/953277206132559729"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/jetpack-room.html","title":"التعامل مع قواعد البيانات باستخدام روم Room Jetpack"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhW7vXIdmhCtdBzNIxlwgN0h8PXa9gag5vh7dNcUt6Pwng7McFNrQry7m42r3cNTrLzHRCIhPyfgeQDyrYmsvNWJh9ymv3eVWYToVOWG54jUPJfUu5nYyt2guwigfmyqXtThZIRveYXwAc\/s72-c\/Room.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-1894707319514652729"},"published":{"$t":"2018-06-15T16:11:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.680-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"Android"},{"scheme":"http://www.blogger.com/atom/ns#","term":"Database"},{"scheme":"http://www.blogger.com/atom/ns#","term":"jetpack"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kotlin"}],"title":{"type":"text","$t":"التعامل مع قواعد البيانات باستخدام روم Room Jetpack"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u0026nbsp;حسنا عدنا الى \u003Ca href=\"http:\/\/www.androidbella.com\/2018\/05\/android-jetpack.html\" rel=\"\" target=\"_blank\"\u003Eشروحات الترسانة JetPack \u003C\/a\u003Eو هذه المرة مع \u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E لادارة قاعدة البيانات بافضل طريقة ممكنة و باقل عدد من\u0026nbsp; الاخطاء قد تكون \u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E السلاح الاكثر قابلية\u0026nbsp; للاستعمال مع بين \u003Ca href=\"http:\/\/www.androidbella.com\/2018\/05\/android-jetpack.html\" rel=\"\" target=\"_blank\"\u003Eترسانة Jetpack\u003C\/a\u003E اذا سبق و حصلت على العديد من الاخطاء بسبب قاعدة البيانات الحقيرة SQLite فان\u0026nbsp; \u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003ERoom\u003C\/a\u003E هو الحل\u0026nbsp; بدل التعامل \u003Ca href=\"https:\/\/developer.android.com\/reference\/android\/database\/Cursor\" rel=\"nofollow\" target=\"_blank\"\u003Ecursor\u003C\/a\u003E ستتعامل مع الكلاسات و هذا افضل و اسرع .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003C\/div\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiRAvccSSG5Ijeq3T3YyPEXO20K_zbLuXZfKvi8Ud7l4ne7grDcuU_JUApT4WggKDugfoLJtxOXu7sxiKlPcuOUdYQyCOsiZIWh8rsi9NGvRljzpceZADAkyr5XxR0xBIkJm27K833ZPYY\/s1600\/Room.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"التعامل مع قواعد البيانات باستخدام روم Room Jetpack\" border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"266\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiRAvccSSG5Ijeq3T3YyPEXO20K_zbLuXZfKvi8Ud7l4ne7grDcuU_JUApT4WggKDugfoLJtxOXu7sxiKlPcuOUdYQyCOsiZIWh8rsi9NGvRljzpceZADAkyr5XxR0xBIkJm27K833ZPYY\/s400\/Room.png\" title=\"التعامل مع قواعد البيانات باستخدام روم Room Jetpack\" width=\"400\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E1-ما هي مميزات الروم\u003Cbr \/\u003E\u003Col style=\"text-align: right;\"\u003E\u003Cli\u003Eلا تسمح لك روم بان ترسل استعلاما خاطئا لقاعدة البيانات فالتحقق يتم اثناء برمجة التطبيق\u003C\/li\u003E\u003Cli\u003Eستحتاج الى طلب او instance واحد لقاعدة البيانات\u0026nbsp; في كل التطبيق\u003C\/li\u003E\u003Cli\u003Eتتميز روم بالسرعة مقارنة مع \u003Ca href=\"https:\/\/github.com\/realm\/realm-java\/tree\/master\/examples\/kotlinExample\/src\/main\/kotlin\/io\/realm\/examples\/kotlin\/model\" rel=\"nofollow\" target=\"_blank\"\u003Erealm\u003C\/a\u003E\u003C\/li\u003E\u003Cli\u003Eتتميز بالحجم الصغير مقارنة مع \u003Ca href=\"https:\/\/github.com\/realm\/realm-java\/tree\/master\/examples\/kotlinExample\/src\/main\/kotlin\/io\/realm\/examples\/kotlin\/model\" rel=\"nofollow\" target=\"_blank\"\u003Erealm\u003C\/a\u003E\u003C\/li\u003E\u003Cli\u003Eلا يمكن الاتصال بروم من خلال thread الرئيسي و انما من خلال\u0026nbsp; thread منفصل\u003C\/li\u003E\u003C\/ol\u003E\u003Cbr \/\u003E2-تهيئ البيئة :\u003Cbr \/\u003E\u003Cbr \/\u003Eقم باضافة السطرين التاليين الى ملف\u003Cbr \/\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003Ebuild.gradle \u0026nbsp;\u003Cb\u003E(Module: app)\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E\u003Ccode class=\"language-groovy\"\u003Eimplementation \"android.arch.persistence.room:runtime:$rootProject.roomVersion\"\u003Cbr \/\u003EannotationProcessor \"android.arch.persistence.room:compiler:$rootProject.roomVersion\"\u003C\/code\u003E\u003C\/pre\u003E\u003Cbr \/\u003Eوقم باضافة الكود التالي\u0026nbsp; و احصل على احدث المكتبات \u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/adding-components\" rel=\"nofollow\" target=\"_blank\"\u003Eمن هنا\u003C\/a\u003E :\u003Cbr \/\u003E\u003Cpre\u003E\u003Ccode class=\"language-groovy\"\u003Eext {\u003Cbr \/\u003E   roomVersion = '1.0.0'\u003Cbr \/\u003E   archLifecycleVersion = '1.1.0'\u003Cbr \/\u003E}\u003Cbr \/\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003Cbr \/\u003E3- معاينة الجدول:\u003Cbr \/\u003Eسنقوم بانشاء جدول به\u0026nbsp; المعرف و يجب ان يكون فريد unique\u0026nbsp; و الاسم و العمر و هكذا سيكون :\u003Cbr \/\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003Etable \u0026nbsp;\u003Cb\u003ESQLite\u003C\/b\u003E\u003C\/div\u003E\u003Cpre\u003E+-------+--------------+------+-----+----------------+\u003Cbr \/\u003E| Field | Type         | Null | Key | Extra          |\u003Cbr \/\u003E+-------+--------------+------+-----+----------------+\u003Cbr \/\u003E| id    | int          | YES  | PRI | auto_increment |\u003Cbr \/\u003E| name  | String       | NO   |     |                |\u003Cbr \/\u003E| age   | String       | NO   |     |                |\u003Cbr \/\u003E+-------+--------------+------+-----+----------------+\u003Cbr \/\u003E\u003C\/pre\u003E\u003Cbr \/\u003E4-حسنا الان الى التطبيق :\u003Cbr \/\u003Eحسنا سنقوم بانشاء داتا كلاس(اساسيات كوتلن) و فيه سيكون المعرف\u0026nbsp; و الاسم و العمر :\u003Cbr \/\u003E\u003Cul style=\"text-align: right;\"\u003E\u003Cli\u003E@PrimaryKey : لاجل جعل المعرف خاصا\u0026nbsp;\u003C\/li\u003E\u003Cli\u003EautoGenerate : يعني اذا كنت تريد ملىء الحقل تلقائيا ضع true\u003C\/li\u003E\u003Cli\u003E@ColumnInfo : وضع اسم الحقل اذا كنت ترغب فاعطائه اسما غير الاسم الموجود في الكلاس\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt \u0026nbsp;\u003Cb\u003E(Data Class → Person)\u003C\/b\u003E\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab0\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab1\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv id=\"tab0\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E@Entity\u003Cbr \/\u003Edata class Person(@PrimaryKey(autoGenerate = true) var id:Int,\u003Cbr \/\u003E                  @ColumnInfo(name = \"name\") var name:String,\u003Cbr \/\u003E                  @ColumnInfo(name = \"age\")  var age:Double)\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab1\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003E@Entity\u003Cbr \/\u003Epublic class Person {\u003Cbr \/\u003E    @PrimaryKey\u003Cbr \/\u003E    private int id;\u003Cbr \/\u003E\u003Cbr \/\u003E    @ColumnInfo(name = \"name\")\u003Cbr \/\u003E    private String name;\u003Cbr \/\u003E\u003Cbr \/\u003E    @ColumnInfo(name = \"age\")\u003Cbr \/\u003E    private Double age;\u003Cbr \/\u003E\u003Cbr \/\u003E    \/\/getter \u0026amp; setter \u003Cbr \/\u003E    \/\/ مهمين جدا ليعمل الكود و لم اضفهما اختصارا\u003Cbr \/\u003E}\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003Eالان سنقوم باضافة DAO :\u003Cbr \/\u003Eما هو DAO هو كائن object يسمح لك للتحقق من صحة الاستعلام اثناء الكومبلين\u0026nbsp; حسنا بعبارة اوضح هو للوصول الى قاعدة البيانات بامان تام من اخطاء برمجية .\u003Cbr \/\u003EDAO اما ان يكون Interface او abstract\u0026nbsp; انا ساستعمل interface :\u003Cbr \/\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt \u0026nbsp;\u003Cb\u003E(Interface → PersonDao)\u003C\/b\u003E\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab2\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab3\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv id=\"tab2\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E@Dao\u003Cbr \/\u003Einterface PersonDao {\u003Cbr \/\u003E @Query(\"SELECT * FROM person\")\u003Cbr \/\u003E fun getAll(): List\u003Cperson\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E @Query(\"SELECT * FROM person WHERE id IN (:personIds)\")\u003Cbr \/\u003E fun loadAllByIds(userIds: IntArray): List\u003Cperson\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E @Query(\"SELECT * FROM person WHERE name LIKE :name LIMIT 1\")\u003Cbr \/\u003E fun findByName(name: String): Person\u003Cbr \/\u003E\u003Cbr \/\u003E @Insert(onConflict = REPLACE)\u003Cbr \/\u003E fun insertAll(vararg users: Person)\u003Cbr \/\u003E\u003Cbr \/\u003E @Delete\u003Cbr \/\u003E fun delete(user: Person)\u003Cbr \/\u003E}\u003C\/person\u003E\u003C\/person\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab3\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003E@Dao\u003Cbr \/\u003Epublic interface PersonDao {\u003Cbr \/\u003E    @Query(\"SELECT * FROM person\")\u003Cbr \/\u003E    List\u003Cperson\u003E getAll();\u003Cbr \/\u003E\u003Cbr \/\u003E    @Query(\"SELECT * FROM person WHERE uid IN (:personIds)\")\u003Cbr \/\u003E    List\u003Cperson\u003E loadAllByIds(int[] personIds);\u003Cbr \/\u003E\u003Cbr \/\u003E    @Query(\"SELECT * FROM person WHERE name LIKE :name AND \"\u003Cbr \/\u003E           + \"age LIKE :age LIMIT 1\")\u003Cbr \/\u003E    Person findByName(String name, String age);\u003Cbr \/\u003E\u003Cbr \/\u003E    @Insert\u003Cbr \/\u003E    void insertAll(Person... persons);\u003Cbr \/\u003E\u003Cbr \/\u003E    @Delete\u003Cbr \/\u003E    void delete(Person person);\u003Cbr \/\u003E}\u003C\/person\u003E\u003C\/person\u003E\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003Eستلاحظ انه رغم ان الاستعلامات عبارة عن String الا انه يتم التحقق من\u0026nbsp; المعلومات التي فيه .\u003Cbr \/\u003Eيتم استقبال القيم عبر interface و يتم اخدها من الانترفيس فقط باضافة نقطتين قبل اسم المتغير .\u003Cbr \/\u003Eقابلة للتحقق\u003Cbr \/\u003E\u003Col style=\"text-align: right;\"\u003E\u003Cli\u003E@Insert لاضافة مستخدم الى قاعدة البيانات , يرجى الانتباه الى امكانية وجود تعارض conflit .\u003C\/li\u003E\u003Cli\u003E@Query\u0026nbsp; لعمل استعلام على قاعدة البيانات .\u003C\/li\u003E\u003Cli\u003E@Update لتحديث معلومات المستخدم على قاعدة البيانات .\u003C\/li\u003E\u003Cli\u003E@Delete لحذف مستخدم على قاعدة البيانات .\u003C\/li\u003E\u003C\/ol\u003Eلا يمكن التحقق منها.\u003Cbr \/\u003E\u003Col style=\"text-align: right;\"\u003E\u003Cli\u003E@RawQuery لاستقبال استعلامات مجهولة و\u0026nbsp; يستحق تدوينة منفردة .\u003C\/li\u003E\u003C\/ol\u003E\u0026nbsp;تاليا نضيف الكلاس الذي ناخد به instance من database :\u003Cbr \/\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EAppDatabase.kt \u0026nbsp;\u003Cb\u003E(Main Class → AppDatabase)\u003C\/b\u003E\u003C\/div\u003E \u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab4\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab5\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv id=\"tab4\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E@Database(entities = arrayOf(Person::class), version = 1)\u003Cbr \/\u003Eabstract class AppDatabase : RoomDatabase() {\u003Cbr \/\u003E abstract fun personDao(): PersonDao\u003Cbr \/\u003E}\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab5\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003E@Database(entities = {Person.class}, version = 1)\u003Cbr \/\u003Epublic abstract class AppDatabase extends RoomDatabase {\u003Cbr \/\u003E    public abstract PersonDao personDao();\u003Cbr \/\u003E}\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E كل الكودات التالية يمكن جمعها في ملف واحد باسم\u0026nbsp;\u0026nbsp;AppDatabase.kt\u003Cbr \/\u003Eحسنا لننتقل الى الجهة الاخرى وهي الواجهة :\u003Cbr \/\u003EMain.kt\u003Cbr \/\u003E\u003Cdiv class=\"highlight-ab\" dir=\"ltr\" style=\"text-align: left;\"\u003EMain.kt \u0026nbsp;\u003Cb\u003E(Activity → Main)\u003C\/b\u003E\u003C\/div\u003E\u003Cdiv class=\"preparent mdraggable\"\u003E\u003Cul class=\"tabs\"\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab6\"\u003Ekotlin\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\"tab\"\u003E\u003Ca href=\"#tab7\"\u003Ejava\u003C\/a\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cdiv id=\"tab6\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Cbr \/\u003E    class Main : AppCompatActivity() {\u003Cbr \/\u003E    \u003Cbr \/\u003E     override fun onCreate(savedInstanceState: Bundle?) {\u003Cbr \/\u003E      super.onCreate(savedInstanceState)\u003Cbr \/\u003E      setContentView(R.layout.ac_main)\u003Cbr \/\u003E      \/\/استخدام مكتبة انكو لتسهيل الوصول الى تريد thread منفصل\u003Cbr \/\u003E      doAsync {\u003Cbr \/\u003E       \/\/instance\u003Cbr \/\u003E       val db = Room.databaseBuilder(this@Main, AppDatabase::class.java, \"database-name\").build()\u003Cbr \/\u003E       \/\/انشاء مستحدم جديد\u003Cbr \/\u003E       val person=Person( null, \"Ismail Bella\",  19.0)\u003Cbr \/\u003E       \/\/اضافة المستخدم الى قاعدة البيانات من خلال interface\u003Cbr \/\u003E       db.userDao().insertAll(person)\u003Cbr \/\u003E       \/\/ ارسال استعلام للحصول على معلومات المستخدم المسجلة من خلال الاسم\u003Cbr \/\u003E       val rp=db.userDao().findByName(\"Ismail Bella\")\u003Cbr \/\u003E       \/\/طباعة عمر المستخدم على Log\u003Cbr \/\u003E       uiThread { Log.e(\"your age\",rp.age.toString()) }\u003Cbr \/\u003E      }\u003Cbr \/\u003E     }\u003Cbr \/\u003E    }\u003Cbr \/\u003E    \u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003Cdiv id=\"tab7\" class=\"col s12\"\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\u003Ccode class=\"language-java\"\u003Epublic class Main extends AppCompatActivity {\u003Cbr \/\u003E    @Override\u003Cbr \/\u003E    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {\u003Cbr \/\u003E        super.onCreate(savedInstanceState, persistentState);\u003Cbr \/\u003E        setContentView(R.layout.ac_main);\u003Cbr \/\u003E        new getPerson().execute();\u003Cbr \/\u003E    }\u003Cbr \/\u003E\u003Cbr \/\u003E    private class getPerson extends AsyncTask\u003Cvoid, integer,=\"\" person=\"\"\u003E {\u003Cbr \/\u003E        @Override protected Person doInBackground(Void... voids) {\u003Cbr \/\u003E            \/\/instance\u003Cbr \/\u003E            AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, \"database-name\").build();\u003Cbr \/\u003E            \/\/انشاء مستحدم جديد\u003Cbr \/\u003E            Person person = new Person(null, \"Ismail Bella\", 19.0);\u003Cbr \/\u003E            \/\/اضافة المستخدم الى قاعدة البيانات من خلال interface\u003Cbr \/\u003E            db.userDao().insertAll(person);\u003Cbr \/\u003E            \/\/ ارسال استعلام للحصول على معلومات المستخدم المسجلة من خلال الاسم\u003Cbr \/\u003E            Person rp = db.userDao().findByName(\"Ismail Bella\");\u003Cbr \/\u003E            return rp;\u003Cbr \/\u003E        }\u003Cbr \/\u003E\u003Cbr \/\u003E        \/\/طباعة عمر المستخدم على Log\u003Cbr \/\u003E        protected void onPostExecute(Person result) {\u003Cbr \/\u003E            Log.e(\"your age\", result.getAge().toString());\u003Cbr \/\u003E        }\u003Cbr \/\u003E    }\u003Cbr \/\u003E}\u003Cbr \/\u003E\u003C\/void,\u003E\u003C\/code\u003E\u003C\/code\u003E\u003C\/pre\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003Eتجدر الاشارة الى انني استخدمت \u003Ca href=\"https:\/\/github.com\/Kotlin\/anko\/pulls\" rel=\"nofollow\" target=\"_blank\"\u003Eمكتبة انكو\u003C\/a\u003E للوصول الى thread منفصل\u0026nbsp; و لابد من\u0026nbsp; طلب الوصول الى قاعدة البيانات من خلال\u0026nbsp; thread منفصل .\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaYx18GapoyluOeMWjrNBLT4TywHEoaG2vBxbjA_4f0ByB44l4lGeIs5J9rPPwRaC7laNdkJI9AiCR5dvzs-tO7zvjLApE7ocH_OJJZAlHsDMG-1wWaLQC2xJFSgLLrfdWdBnQHllyMn4\/s1600\/Screen+Shot+2018-06-15+at+10.46.45+PM.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"نتيجة التطبيق على Log\" border=\"0\" data-original-height=\"106\" data-original-width=\"998\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjaYx18GapoyluOeMWjrNBLT4TywHEoaG2vBxbjA_4f0ByB44l4lGeIs5J9rPPwRaC7laNdkJI9AiCR5dvzs-tO7zvjLApE7ocH_OJJZAlHsDMG-1wWaLQC2xJFSgLLrfdWdBnQHllyMn4\/s1600\/Screen+Shot+2018-06-15+at+10.46.45+PM.png\" title=\"نتيجة التطبيق على Log\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003Eالى هنا نكون قد انتهينا من درس اليوم .\u003Cbr \/\u003Eالمصادر :\u003Cbr \/\u003E\u003Cdiv style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/room\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/developer.android.com\/topic\/libraries\/architecture\/room\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv style=\"text-align: left;\"\u003E\u003Ca href=\"https:\/\/codelabs.developers.google.com\/codelabs\/android-room-with-a-view\/\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/codelabs.developers.google.com\/codelabs\/android-room-with-a-view\/\u003C\/a\u003E\u003Cbr \/\u003E\u003Ca href=\"https:\/\/www.youtube.com\/watch?v=IkQgQFr6xYU\" rel=\"nofollow\" target=\"_blank\"\u003Ehttps:\/\/www.youtube.com\/watch?v=IkQgQFr6xYU\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cscript\u003E$(document).ready(function(){     $('.tabs').tabs();   }); \u003C\/script\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/1894707319514652729\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/room-jetpack.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1894707319514652729"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1894707319514652729"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/room-jetpack.html","title":"التعامل مع قواعد البيانات باستخدام روم Room Jetpack"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiRAvccSSG5Ijeq3T3YyPEXO20K_zbLuXZfKvi8Ud7l4ne7grDcuU_JUApT4WggKDugfoLJtxOXu7sxiKlPcuOUdYQyCOsiZIWh8rsi9NGvRljzpceZADAkyr5XxR0xBIkJm27K833ZPYY\/s72-c\/Room.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-4250994912146701407"},"published":{"$t":"2018-06-13T11:47:00.002-07:00"},"updated":{"$t":"2018-08-15T03:37:50.807-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"تطبيقات"}],"title":{"type":"text","$t":"هدية العيد : اطلاق مع خطوة لتعلم البرمجة بشكل منطم"},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cdiv class=\"mcontent\"\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step1\"\u003E\u003Cscript\u003E\n$(document).ready(function(){\naddSteps('[\"نظرة عامة\",\"خصائص هذا الموقع\",\"تتمة\"]');\n});\n\u003C\/script\u003E   \u003Cbr \/\u003E\n\u003Cdiv\u003E\u003Ch4\u003E1.نظرة عامة\u003C\/h4\u003Eهذه خاصية جديدة و رائعة و افضل من حيث التعامل مع التذوينات خصوصا ان التدوينة في موقعنا اندرويد بلا\u0026nbsp; لا تظهر بشكل مرتب و كافي لهذا ارتايت ان اقوم باخد الفكرة من موقع جوجل و لك ان تستفيد منه codelab موقع رائع حقيقة\u003Cbr \/\u003E\n\u003Cbr \/\u003E\nلكن هناك ما لا يشجعني على هذا الموقع و هو الاستضافة فهذه استضافة مجانية من جوجل (Blogger) في حتى كتابة تدوينة مرتبة ليس بالامر السهل بتاتا لهذا ان نجحت هذه الفكرة و استقطبنا مزيدا من الزوار انذاك ساضيف بعض الاعلانات لتطوير فقط و لن ادخل ريالا الى جيبي و ساحاول التقليل منها لهذا لا تقلق فلن ترى الكثير من الاعلانات\u003Cbr \/\u003E\n\u003Cbr \/\u003E\n\u003Ch5 class=\"bold\"\u003Eما الذي يجعل هذه الفكرة افضل\u0026nbsp;\u003C\/h5\u003E\u003Cul class=\"checklist\"\u003E\u003Cli\u003Eسهولة التصفح التدوينة\u003C\/li\u003E\n\u003Cli\u003Eتجنب تجاوز احد الخطوات\u003C\/li\u003E\n\u003Cli\u003Eسهولة القراءة\u003C\/li\u003E\n\u003Cli\u003Eالوضع الليلي يآتي قريبا\u003C\/li\u003E\n\u003Cli\u003Eالتصميم الرائع\u003C\/li\u003E\n\u003C\/ul\u003E\u003Ch5 class=\"bold\"\u003Eماذا سيحدث للموقع الاخر\u003C\/h5\u003E\u003Cdiv\u003Eعموما موقع اندرويد بلا سيبقى على حاله و لن تغير فيه شيئا و ساواصل التدوين على ذلك الموقع.\u003C\/div\u003E\u003Cul\u003E\u003C\/ul\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step2\"\u003E\u003Ch4 class=\"style-scope google-codelab-step\" id=\"title\"\u003E2. \u003Cspan class=\"style-scope google-codelab-step\"\u003Eخصائص هذا الموقع\u003C\/span\u003E\u003C\/h4\u003Eلدينا عدة خصائص لن يكفي عرضها هنا لكن ساحاول عرض اغلبها عشوائيا\u003Cbr \/\u003E\n\u003Ch5 class=\"bold\"\u003Eطريقة عرض الصور:\u003C\/h5\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZdwP9kRKbWNeJV0Z1Re6CaaE2XTqJm5bMfHG9LgDskIJTBMa9j5tdks_rDfNwAhji3D1xIFSWB-YUJQY0kYp2AnaGc3pfe9UAXbdD1yCr6_qSXW98a0yJ3RDNDLvPAalYzC1nd-VEHy0\/s1600\/facedetec.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"627\" data-original-width=\"940\" height=\"213\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZdwP9kRKbWNeJV0Z1Re6CaaE2XTqJm5bMfHG9LgDskIJTBMa9j5tdks_rDfNwAhji3D1xIFSWB-YUJQY0kYp2AnaGc3pfe9UAXbdD1yCr6_qSXW98a0yJ3RDNDLvPAalYzC1nd-VEHy0\/s320\/facedetec.png\" width=\"320\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\n\u003C\/div\u003E\u003Ch5 class=\"bold\"\u003Eطريقة عرض الاكواد :\u003C\/h5\u003E\u003Cpre\u003E\u003Ccode class=\"language-kotlin\"\u003E\nimport java.time.LocalDateTime\nimport java.time.format.DateTimeFormatter\n\nfun main(args: Array\u003Cstring\u003E) {\n    print('the best programming language in world')\n}\n\u003C\/code\u003E\u003C\/pre\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\n\u003C\/div\u003E\u003C\/div\u003E\u003Cdiv class=\"card mcard section-step\" id=\"step3\"\u003E\u003Ch4 class=\"style-scope google-codelab-step\" id=\"title\"\u003E\u003Cspan class=\"style-scope google-codelab-step\"\u003E3\u003C\/span\u003E. \u003Cspan class=\"style-scope google-codelab-step\"\u003Eخصائص\u0026nbsp;\u003C\/span\u003E\u0026nbsp;هذا الموقع (تتمة)\u003C\/h4\u003E\u003Ch5 class=\"bold\"\u003Eطريقة عرض القائمة :\u003C\/h5\u003E\u003Cul class=\"checklist\"\u003E\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003Cli\u003Eالخطوة الاولى\u003C\/li\u003E\n\u003C\/ul\u003E\u003Ch5 class=\"bold\"\u003E\u003Cul style=\"-webkit-text-stroke-width: 0px; color: black; font-family: Skia; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: right; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;\"\u003E\u003C\/ul\u003E\u003C\/h5\u003E\u003Ch5 class=\"bold\" style=\"-webkit-text-stroke-width: 0px; color: black; font-family: Skia; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; orphans: 2; text-align: right; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;\"\u003Eطريقة عرض العناوين و النصوص :\u003C\/h5\u003Eاصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل اصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل اصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل\u0026nbsp; اصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل\u003Cbr \/\u003E\nاصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل اصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل اصبحت افضل مع الفصل بين الفقرات بحيث تستطيع صديقي المبرمج القراءة من دون ملل\u003Cbr \/\u003E\n\u003Ch5 class=\"bold\"\u003Eبالطبع لن توقف هنا هناك العديد من الخصائص قادمة ان شاء الله\u003C\/h5\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003E\n\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/4250994912146701407\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/boooow.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/4250994912146701407"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/4250994912146701407"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/boooow.html","title":"هدية العيد : اطلاق مع خطوة لتعلم البرمجة بشكل منطم"}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZdwP9kRKbWNeJV0Z1Re6CaaE2XTqJm5bMfHG9LgDskIJTBMa9j5tdks_rDfNwAhji3D1xIFSWB-YUJQY0kYp2AnaGc3pfe9UAXbdD1yCr6_qSXW98a0yJ3RDNDLvPAalYzC1nd-VEHy0\/s72-c\/facedetec.png","height":"72","width":"72"},"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-8402909723405438809.post-1741215520585818196"},"published":{"$t":"2018-06-08T05:44:00.000-07:00"},"updated":{"$t":"2018-08-15T03:37:50.551-07:00"},"title":{"type":"text","$t":""},"content":{"type":"html","$t":"\u003Cdiv dir=\"rtl\" style=\"text-align: right;\" trbidi=\"on\"\u003E\u003Cbr \/\u003E\u003Cdiv class=\"_3x-2\" data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;H\u0026quot;}\" style=\"-webkit-text-stroke-width: 0px; background-color: white; color: #1d2129; font-family: system-ui, -apple-system, system-ui, \u0026quot;.SFNSText-Regular\u0026quot;, sans-serif; font-size: 12px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;\"\u003E\u003Cdiv data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;H\u0026quot;}\" style=\"font-family: inherit;\"\u003E\u003Cdiv class=\"mtm\" style=\"font-family: inherit; margin-top: 10px;\"\u003E\u003Cdiv style=\"font-family: inherit;\"\u003E\u003Cdiv style=\"font-family: inherit; position: relative;\"\u003E\u003Cdiv class=\"_5cq3\" data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;E\u0026quot;}\" style=\"font-family: inherit; position: relative;\"\u003E\u003Ca ajaxify=\"\/Androidbella4\/photos\/a.1805940762758248.1073741828.860179557334378\/1943411035677886\/?type=3\u0026amp;size=1920%2C1749\u0026amp;fbid=1943411035677886\u0026amp;source=13\u0026amp;player_origin=photos\" class=\"_4-eo _2t9n\" data-ploi=\"https:\/\/scontent.fmad3-3.fna.fbcdn.net\/v\/t1.0-9\/34687275_1943411042344552_2545108546282848256_o.png?_nc_cat=0\u0026amp;_nc_eui2=AeHUwpUdWeFousC5ss31oR7pqoHzvS48MIHBgK4DhhW4JRjpio4JSkhgTdMVue-1Y3PI5DNVComexKoFsThxe1RiLMKOkoZuQeKBPU7mjKT9ng\u0026amp;oh=f974d7861f48a89bc107e351ad3531af\u0026amp;oe=5BC33DC3\" data-plsi=\"https:\/\/scontent.fmad3-3.fna.fbcdn.net\/v\/t1.0-9\/34777596_1943411039011219_1900374899352928256_n.png?_nc_cat=0\u0026amp;_nc_eui2=AeGys22rUDhyAvwimTfj4pywnsZzZqDZrZDA9L8vWOf2_MAdceN_eYtaDn6zquyeZw5nCNY4g_8CvHdux3lkgZxSWDv871N5UspVyUJ_8yYeUg\u0026amp;oh=178f9dae0fa7644cbfb63d301d26e959\u0026amp;oe=5BB6CDBE\" data-render-location=\"homepage_stream\" href=\"https:\/\/www.facebook.com\/Androidbella4\/photos\/a.1805940762758248.1073741828.860179557334378\/1943411035677886\/?type=3\" rel=\"theater\" style=\"box-shadow: rgba(0, 0, 0, 0.05) 0px 1px 1px; color: #365899; cursor: pointer; display: block; font-family: inherit; position: relative; text-decoration: none; width: 476px;\"\u003E\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cdiv class=\"_5pbx userContent _3576\" data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;K\u0026quot;}\" id=\"js_1l6v\" style=\"-webkit-text-stroke-width: 0px; background-color: white; color: #1d2129; font-family: system-ui, -apple-system, system-ui, \u0026quot;.SFNSText-Regular\u0026quot;, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.38; margin-top: 6px; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;\"\u003E\u003Cdiv class=\"_5wj-\" dir=\"rtl\" style=\"font-family: inherit; text-align: right;\"\u003E\u003Cdiv class=\"text_exposed_root text_exposed\" id=\"id_5b1a79ed9c7c58428407311\" style=\"display: inline; font-family: inherit;\"\u003E\u003Cdiv style=\"display: block; font-family: inherit; margin: 0px 0px 6px;\"\u003E\u003Ca class=\"_58cn\" data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;*N\u0026quot;,\u0026quot;type\u0026quot;:104}\" href=\"https:\/\/www.facebook.com\/hashtag\/%D8%B3%D9%84%D8%B3%D9%84%D8%A9_%D8%AA%D8%B5%D8%AD%D9%8A%D8%AD_%D8%A7%D9%81%D9%83%D8%A7%D8%B1_%D9%85%D8%BA%D9%84%D9%88%D8%B7%D8%A9?source=feed_text\" style=\"color: #365899; cursor: pointer; font-family: inherit; text-decoration: none;\"\u003E\u003Cspan class=\"_5afy\" style=\"direction: rtl; font-family: inherit; unicode-bidi: isolate;\"\u003E\u003Cspan aria-label=\"hashtag\" class=\"_58cl _5afz\" style=\"color: #365899; font-family: inherit; unicode-bidi: isolate;\"\u003E\u003Cbr class=\"Apple-interchange-newline\" \/\u003E#\u003C\/span\u003E\u003Cspan class=\"_58cm\" style=\"font-family: inherit;\"\u003Eسلسلة_تصحيح_افكار_مغلوطة\u003C\/span\u003E\u003C\/span\u003E\u003C\/a\u003E\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003Edalvik قد توقف\u003Cbr \/\u003Eزبدة القول : او خلاصة القول جوجل في اصدار اللوليبوب تخلت عن dalvik و اصدرت مكانه ART\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f6f\/2\/16\/1f602.png?_nc_eui2=AeEi7ralZe1tAv3L5TD5UwgR-WjeJqH79vABOWEKnQYeZlYYzS-fH2bGdIlxxNNN2neU52MSt67A_t8Mo8aCPBIXEWEZHAdCmWUV30xSUjXZvQ\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E😂\u003C\/span\u003E\u003C\/span\u003E\u003Cbr \/\u003Eلكن لماذا؟\u003Cbr \/\u003Eحسنا الكود البرمجي الذي تكتبه على اكل الرام\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f6f\/2\/16\/1f602.png?_nc_eui2=AeEi7ralZe1tAv3L5TD5UwgR-WjeJqH79vABOWEKnQYeZlYYzS-fH2bGdIlxxNNN2neU52MSt67A_t8Mo8aCPBIXEWEZHAdCmWUV30xSUjXZvQ\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E😂\u003C\/span\u003E\u003C\/span\u003E\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003Eعفوا على الاندرويد ستوديو نعلم جميعا انه عندما يتحول الى\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f6f\/2\/16\/1f448.png?_nc_eui2=AeEi7ralZe1tAv3L5TD5UwgR-WjeJqH79vABOWEKnQYeZlYYzS-fH2bGdIlxxNNN2neU52MSt67A_t8Mo8aCPBIXEWEZHAdCmWUV30xSUjXZvQ\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👈\u003C\/span\u003E\u003C\/span\u003E\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003Eapk العديد من الامور تحدث له حيث يتحول الى\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f6f\/2\/16\/1f448.png?_nc_eui2=AeEi7ralZe1tAv3L5TD5UwgR-WjeJqH79vABOWEKnQYeZlYYzS-fH2bGdIlxxNNN2neU52MSt67A_t8Mo8aCPBIXEWEZHAdCmWUV30xSUjXZvQ\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👈\u003C\/span\u003E\u003C\/span\u003Eبايت كود داخل ملف يسمى classes.dex وعند تنصيب apk على هاتف المستخدم يتم استخراج هذا الملف و\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f6f\/2\/16\/1f448.png?_nc_eui2=AeEi7ralZe1tAv3L5TD5UwgR-WjeJqH79vABOWEKnQYeZlYYzS-fH2bGdIlxxNNN2neU52MSt67A_t8Mo8aCPBIXEWEZHAdCmWUV30xSUjXZvQ\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👈\u003C\/span\u003E\u003C\/span\u003E\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003Eارساله الى مسار منفصل و هنا تقع المشكلة من واراء تحويل البايت كود الى لغة الالة حسنا لدينا ثلات م\u003Cspan class=\"text_exposed_show\" style=\"display: inline; font-family: inherit;\"\u003Eراحل مر منها الاندرويد في هذا الشان .\u003Cbr \/\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f18\/2\/16\/1f44a.png?_nc_eui2=AeEPcsZ-xpeKudzKbKJFUVWrJXKfG6OUnYDG1uk_fObOupmXSZQaU7k-q2kNNjlFBUd02HYyoOIczCi4rj7UVliTY49ZyPWNQkNHrYogfF65bg\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👊\u003C\/span\u003E\u003C\/span\u003Eقبل اندرويد KITKAT\u003Cbr \/\u003Eif (Build.VERSION.SDK_INT \u0026lt;= Build.VERSION_CODES.K) {\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv class=\"text_exposed_show\" style=\"display: inline; font-family: inherit;\"\u003E\u003Cdiv style=\"font-family: inherit; margin: 0px 0px 6px;\"\u003Eالدالفيك او Dalvik\u003Cbr \/\u003Eو كثير من المبرمجين يظنون ان هو الذي يعمل في هواتفنا الى يومنا هذا و انا كنت منهم للاسف و هو يعمل على تحويل جزء من البايت كود الى machine code في كل مرة تفتح فيها تطبيقك و هذا يسمى ب just In Time او JIT اختصارا و لا اريد ان اذخل في تفاصيل اكثر لانني لن نصل لنهاية ابدا\u003Cbr \/\u003E}\/\/First\u003Cbr \/\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f18\/2\/16\/1f44a.png?_nc_eui2=AeEPcsZ-xpeKudzKbKJFUVWrJXKfG6OUnYDG1uk_fObOupmXSZQaU7k-q2kNNjlFBUd02HYyoOIczCi4rj7UVliTY49ZyPWNQkNHrYogfF65bg\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👊\u003C\/span\u003E\u003C\/span\u003Eصدور اندرويد KITKAT\u003Cbr \/\u003Eif (Build.VERSION.SDK_INT == Build.VERSION_CODES.K) {\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003Eفي المرحلة الثانية ثم اصدار ART الى جانب Dalvik و سنتحدث عن ART\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/fee\/2\/16\/1f447.png?_nc_eui2=AeGhtaiOTgdlBBFoR9TUDkCi5dhPgNo8A-41JaYWSWZGEOFkFxmd8FxVOxVtqVxU8nelzwMUF07qDIPNYk5s4KPf9CNe0P-iifkijwRiwh5M8A\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👇\u003C\/span\u003E\u003C\/span\u003E\u003Cbr \/\u003E}\/\/Second\u003Cbr \/\u003E\u003Cspan class=\"_5mfr _47e3\" style=\"font-family: inherit; line-height: 0; margin: 0px 1px; vertical-align: middle;\"\u003E\u003Cimg alt=\"\" class=\"img\" height=\"16\" role=\"presentation\" src=\"https:\/\/static.xx.fbcdn.net\/images\/emoji.php\/v9\/f18\/2\/16\/1f44a.png?_nc_eui2=AeEPcsZ-xpeKudzKbKJFUVWrJXKfG6OUnYDG1uk_fObOupmXSZQaU7k-q2kNNjlFBUd02HYyoOIczCi4rj7UVliTY49ZyPWNQkNHrYogfF65bg\" style=\"border: 0px; vertical-align: -3px;\" width=\"16\" \/\u003E\u003Cspan class=\"_7oe\" style=\"display: inline-block; font-family: inherit; font-size: 0px; width: 0px;\"\u003E👊\u003C\/span\u003E\u003C\/span\u003Eصدور اندرويد LOLLIPOP\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003Eif (Build.VERSION.SDK_INT \u0026gt;= Build.VERSION_CODES.L) {\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003Eفي المرحلة الثالثة ثم التخلى عن Dalvik لكن لماذا و ما الفرق بينهما\u003Cbr \/\u003Eحسنا ART يحول الكود كاملا الى لغة الالة عند التنصيب كاملا مما يعطي اداء افضل للهاتف و البطارية و ايضا يمكن ان الحصول على معلومات اكثر من debbuger اثناء توقف التطبيق و هذا ما يسمى Ahead Of Time او AOT اختصارا لكن ياخد وقت اطول عند تنصيب التطبيق\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003E}\/\/END\u003Cspan\u003E\u0026nbsp;\u003C\/span\u003E\u003Cbr \/\u003Eالمصادر :\u003Cbr \/\u003E\u003Ca data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;-U\u0026quot;}\" data-lynx-mode=\"asynclazy\" href=\"https:\/\/l.facebook.com\/l.php?u=https%3A%2F%2Fsource.android.com%2Fdevices%2Ftech%2Fdalvik%2F\u0026amp;h=ATMO2aD_8usLsBVcQzDQx8QQnqXPsCf5BK4FqjJFCYbTM2vtLnXLNdjnCvtbAcr6sSTuPkFAIqO-XVdzDCmXAnFwAKux4DeyGYp9-wr28QwAYZx2wF0G7W-pagUOn8ol6jOMJUwVbceuUbw\" rel=\"noopener nofollow\" style=\"color: #365899; cursor: pointer; font-family: inherit; text-decoration: none;\" target=\"_blank\"\u003Ehttps:\/\/source.android.com\/devices\/tech\/dalvik\/\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003E\u003Ca data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;-U\u0026quot;}\" data-lynx-mode=\"asynclazy\" data-lynx-uri=\"https:\/\/l.facebook.com\/l.php?u=https%3A%2F%2Fwww.quora.com%2FWhy-has-Google-decided-to-replace-Dalvik-Virtual-Machine-by-Android-RunTime-ART-in-the-upcoming-versions-of-Android\u0026amp;h=ATM2A5sXEFyK1J6iphHgeMlKoYcNZmTQIlugdDAZsBFR368D_gShMAUFp1hYC6nfEtDujOVOG6yGj1BPuhWU9iN90fIDuNLEdv7H7kliK6fAeuxiGCi1M__m7P02HXghUO09Kh5_wzs5ud8\" href=\"https:\/\/www.quora.com\/Why-has-Google-decided-to-replace-Dalvik-Virtual-Machine-by-Android-RunTime-ART-in-the-upcoming-versions-of-Android\" rel=\"noopener nofollow\" style=\"color: #365899; cursor: pointer; font-family: inherit; text-decoration: none;\" target=\"_blank\"\u003Ehttps:\/\/www.quora.com\/Why-has-Google-decided-to-replace-Dal…\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003E\u003Ca data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;-U\u0026quot;}\" data-lynx-mode=\"async\" data-lynx-uri=\"https:\/\/l.facebook.com\/l.php?u=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FAndroid_Runtime\u0026amp;h=ATNRKGOxlkeXiOIr0s1NDs4412zHWNKqiGKnyy9L9nT1hTP0GzI5r7W_i87o-U7K-1Yzbepx32tJdkl0rJhWQ5Fgb30YzClS-FD93BmTxhBmEkmRDVEHTjNb4il1xWwenxog0fbk8ZD1i59i2HcxWHva9UPI\" href=\"https:\/\/en.wikipedia.org\/wiki\/Android_Runtime\" rel=\"noopener nofollow\" style=\"color: #365899; cursor: pointer; font-family: inherit; text-decoration: none;\" target=\"_blank\"\u003Ehttps:\/\/en.wikipedia.org\/wiki\/Android_Runtime\u003C\/a\u003E\u003C\/div\u003E\u003Cdiv style=\"font-family: inherit; margin: 6px 0px;\"\u003E\u003Ca data-ft=\"{\u0026quot;tn\u0026quot;:\u0026quot;-U\u0026quot;}\" data-lynx-mode=\"asynclazy\" data-lynx-uri=\"https:\/\/l.facebook.com\/l.php?u=https%3A%2F%2Fgithub.com%2Fdogriffiths%2FHeadFirstAndroid%2Fwiki%2FHow-Android-Apps-are-Built-and-Run\u0026amp;h=ATOAmWRrrTOEbUdHLIG3YYpFcNUy0epaFqSbgpiy3l8jL6UTClb9aYOtrs3pEV_SwoFOf4fKl23XndyrdFSYbwdxo3oKBKV45FI_7xe0_VhI4raMLXohJCHjXi9stbdlZuNmoLr3AVMLi9A\" href=\"https:\/\/github.com\/dogriffiths\/HeadFirstAndroid\/wiki\/How-Android-Apps-are-Built-and-Run\" rel=\"noopener nofollow\" style=\"color: #365899; cursor: pointer; font-family: inherit; text-decoration: none;\" target=\"_blank\"\u003Ehttps:\/\/github.com\/…\/wiki\/How-Android-Apps-are-Built-and-Run\u003C\/a\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E"},"link":[{"rel":"replies","type":"application/atom+xml","href":"https:\/\/androdihow.blogspot.com\/feeds\/1741215520585818196\/comments\/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/dalvik-dalvik-art-apk-classes.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1741215520585818196"},{"rel":"self","type":"application/atom+xml","href":"https:\/\/www.blogger.com\/feeds\/8402909723405438809\/posts\/default\/1741215520585818196"},{"rel":"alternate","type":"text/html","href":"https:\/\/androdihow.blogspot.com\/2018\/06\/dalvik-dalvik-art-apk-classes.html","title":""}],"author":[{"name":{"$t":"Ismail Bella"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/09498038006406076499"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjcBd0Nph7sNflgjIQnoR_KKAboI0a4vUDz8GVW_QERy3ZgclTuJ2Ys6g196zRhLmQBlRV8RTxld-wa4lkHYydKvcYiYmSybcVVkmZnXiixnfpLMf5wlTnLF7_gPHlrTA\/s113\/7f561b58f39837b3a6557f2322cca3eb325fcec8_hq.jpg"}}],"thr$total":{"$t":"0"}}]}}