آموزش نصب اندروید استودیو

آموزش نصب اندروید استودیو و معرفی آن :

اندروید استودیو یک محیط برنامه نویسی قدرتمند برای پلتفرم اندروید میباشد.

آموزش نصب اندروید استودیو :

نرم افزار اندروید استودیو در ماه می سال 2014 توسط مدیران گوگل در کنفرانس گوگل آی/او معرفی شد.

معرفی اندروید استودیو :

این نرم افزار محصول کمپانی محبوب جت برینز میباشد.

آموزش نصب اندروید استودیو

زبان های برنامه نویسی در اندروید استودیو جاوا و کاتلین میباشند که همچنان بیش از 80 درصد دولوپرها برای کدنویسی از زبان برنامه نویسی قدرتمند جاوا استفاده میکنند.

اندروید استودیو به صورت اختصاصی فقط برای اندروید طراحی شده است.

آموزش نصب اندروید استودیو :

نرم افزار اندروید استودیو بر روی سیستم عامل های ویندوز، مک و لینوکس قابل نصب میباشد.

برای نصب اندروید استودیو در سیستم عامل ویندوز ، مراحل زیر را قدم به قدم انجام دهید :
مرحله اول آموزش نصب اندروید استودیو :

برای اجرای شبیه ساز باید ابتدا به Bios سیستم خود رفته و intel R virtualization technology را فعال کنید .

توجه کنید که این کار برای cpu های شرکت اینتل نیاز میباشد و در cpu های AMD به صورت پیش فرض فعال است.

در مادربوردهای مختلف محیط Bios کمی متفاوت میباشد و ممکن است دقیقا مانند تصاویر زیر نباشد .

virtual1a
آموزش نصب اندروید استودیو
virtual4a
virtual3a
مرحله دوم آموزش نصب اندروید استودیو :

به کنترل پنل رفته و Hyper-V را مانند تصویر غیر فعال کنید تا شبیه ساز اندروید استودیو به درستی در سیستم عامل ویندوز کار کند .

hyperv
مرحله سوم آموزش نصب اندروید استودیو :

نصب JDK و JRE :

مهم : از این مرحله به بعد باید حتما به یک VPN قوی متصل باشید .

زبان جاوا Native نیست و برای اجرا به یک ماشین واسط یا ران تایم (Runtime) نیازمند است که این وظیفه در مورد زبان جاوا برعهده Java Runtime Environment (JRE) می باشد.

برای کامپایل کدهای جاوا، به JDK نیاز است که بسته JDK، ران تایم JRE را نیز دربر گرفته و با دانلود و نصب JDK نیازی به نصب جداگانه JRE نیست.

توجه : Native نبودن جاوا به معنی Native نبودن اپ های نوشته شده به این زبان برای اندروید نیست!

جاوا زبان رسمی اندروید است که از سوی گوگل پشتیبانی می شود.

ضمن اینکه بیشترین داکیومنت‌ها، کتابخانه ها و همچنین مباحث مطرح شده در فروم ها و وبسایت‌ها پیرامون مباحث توسعه اندروید، مربوط به جاوا است.

ابزار JDK متعلق به شرکت Oracle بوده که به دلیل اعمال تحریم ها بر ضد کشور ایران، کاربران با IP این کشور قادر به مشاهده صفحات وب سایت این شرکت و همچنین دانلود ابزارها نیستند.

برای دانلود جدیدترین نسخه های JDK می توانید از نرم افزارهای تغییر آی پی مانند فیلترشکن ها استفاده کنید و سپس از لینک زیر استفاده کنید .

معرفی jdk در اندروید استودیو
مرحله چهارم آموزش نصب اندروید استودیو :

بعد از نصب JDK و قبل از نصب اندروید استودیو باید مسیر نصب جاوا را به سیستم عامل معرفی کنیم تا اندروید استودیو قادر به شناسایی جاوا در سیستم عامل باشه .

مطابق تصاویر زیر در تنظیمات ویندوز و قسمت Environment Variables مسیر نصب JDK را با نام JAVA_HOME به عنوان یک System Variable به سیستم عامل معرفی می کنیم .

مسیر نصب جاوا در ویندوز معمولا به صورت زیر هست که اون رو کپی میکنیم.

به مسیر مربوطه برید در سیستم خودتون و حواستون باشه که مسیر درست رو کپی کنید.

C:\Program Files\Java\jdk-11.0.2

jdk
jdk
jdk2a

در پنجره Environment Variables مانند شکل زیر در قسمت System Variable روی New کلیک میکنیم

jdk

در پنجره New System Variable مانند شکل زیر در قسمتVariable name ، عبارت JAVA_HOME و در قسمت Variable value همون مسیری رو که قبلا کپی کردیم رو میذاریم (مسیر نصب JDK در سیستم) و سپس اکی میکنیم

jdk

مطابق شکل زیر مسیر نصب جاوا به سیستم معرفی شده.

پنجره ها رو یکی یکی اکی میزنیم و میبندیم.

در نهایت یکبار سیستم رو ریستارت میکنیم.

jdk

میخواهم مطمئن شوم جاوا را به درستی به سیستم عامل معرفی کرده ام.

کافیست در Command Prompt دستور java –version را وارد کنم.

برای دسترسی به Command Prompt درون Run (کلید ترکیبی Windows + R) عبارت cmd را وارد کنید.

cmd_a1
آموزش نصب اندروید استودیو

مرحله پنجم آموزش نصب اندروید استودیو :

ابتدا از لینک زیر جدیدترین نسخه اندروید استودیو رو دانلود کنید.

مانند تصاویر نرم افزار اندروید استودیو رو نصب کنید و توجه کنید که در کلیه مراحل دانلود و نصب باید فیلتر شکن روشن باشه.

آموزش نصب اندوید استودیو
آموزش نصب اندوید استودیو
آموزش نصب اندوید استودیو
آموزش نصب اندوید استودیو
آموزش نصب اندوید استودیو
اندروید استودیو
اندروید استودیو
اندروید استودیو

نصب به اتمام رسید. با زدن Finish اندروید استودیو اجرا می شود

نصب اندروید استودیو

اندروید استودیو در حال لود شدن است و بسته به سخت افزار، چند لحظه زمان می برد.

هنگام لودینگ عبارت Powered by intelliJ Platform را مشاهده می کنید.

کمپانی گوگل محیط توسعه (IDE) کمپانی jetBrains را برای اندروید استودیو انتخاب کرده است.

در واقع با انجام تغییرات و اضافه کردن پلاگین(ها) به IntelliJ IDEA که محیط توسعه جاوا می باشد، آنرا برای توسعه دهندگان اندروید آماده و منتشر کرده است.

نصب اندروید استودیو

ابتدا پیغامی ظاهر می شود که امکان ایمپورت کردن تنظیمات از نسخه های قبل را در اختیار می گذارد.

منظور تنظیمات اصلی اندروید استودیو است (مانند تم محیط توسعه و…).

مراحل زیر را مانند تصاویر دنبال میکنیم تا به صفحه ورودی برسیم.

باز هم تاکید میکنم که باید فیلتر شکن روشن باشد.

تا نصب کامل و دانلود های مورد نیاز مدتی طول میکشد.

setup_android2a
setup_android1a
setup_android4a
setup_android3a
آموزش برنامه نویسی اندروید(نصب اندروید استودیو)
آموزش برنامه نویسی اندروید(نصب اندروید استودیو)
آموزش برنامه نویسی اندروید(نصب اندروید استودیو)

به صفحه ورودی رسیدیم. چند گزینه در اختیار داریم شامل ساخت پروژه جدید، ایمپورت پروژه های قبلی از اندروید استودیو یا Eclipse و… . فعلا با اینها کاری ندارم و سراغ SDK Manager می رویم

sdk_managera

پنجره زیر باز میشود . مسیر نصب SDK رو چک کنید که همون مسیری باشه که در هنگام نصب اندروید استودیو انتخاب کردیم

گزینه Show Package Details را علامت می زنم تا جزئیات ابزار و کامپوننت ها نیز نمایش داده شود

sdkinstall2a
sdkinstall1a

تب SDK Tools هم به همین صورت است:

sdkinstall4a
sdkinstall3a

گزینه هایی رو که مورد نیازمون هست تیک میزنیم و نصب میکنیم . باز هم تاکید میشه که باید وی پی ان روشن باشه

توضیحات تکمیلی آموزش نصب اندروید استودیو :

گوگل برای هر نسخه (API) از اندروید ابزار مربوط به آن را نیز در اختیار توسعه دهنده قرار می دهد که شامل SDK Platform، Sources، System image ها و Google APIs می شود.

SDK Platform برای کامپایل کردن اپلیکیشن استفاده می شود.

توسعه دهنده باید همواره آخرین API را نصب داشته باشد تا اپلیکیشنی که می‌سازد با آخرین نسخه اندروید موجود در بازار سازگارباشد.

با یک مثال ساده توضیح می‌دهم:

در زمان تهیه این آموزش، آخرین API منتشر شده اندروید نسخه 28 است.

حالا اگر آخرین API موجود در SDK من نسخه ۲۳ باشد، اپلیکیشن روی API 23 کامپایل شده.

یعنی اپلیکیشن من حداکثر روی دیوایس هایی قابل نصب است که Android 6 (Marshmallow) را داشته باشند و امکان نصب روی دیوایس های جدید مانند گوشی و تبلت که از API 27 بهره می برند میسر نخواهد بود.

پس لازم است همزمان با معرفی نسخه های جدید اندروید، API مربوط به آن را دریافت و نصب کنیم.

البته از زمان معرفی نسخه جدید اندروید تا ورود دیوایس های آن به بازار، چند ماهی طول می کشد.

اما شرکت های سازنده برای دیوایس های رده بالا عموما بعد از یک بازه زمانی حدودا دو ماهه آپدیت ارائه می دهند.

مورد بعدی Sources است که شامل سورس های API بوده و الزامی در نصب آن نیست (مگر مواردی که مایل باشید از سورس ها کمک بگیرید).

گزینه بعد مربوط به System image ها می شود. از سیستم ایمیج ها برای اجرای شبیه ساز (امولاتور) اندروید روی رایانه استفاده می شود.

شبیه سازها توسعه دهندگان را از تست اپ خود روی دیوایس های حقیقی مانند گوشی و تبلت بی نیاز میکنند.

فرض کنید قصد تست و خطایابی پروژه خود را دارید و سعی دارید اپلیکیشن خود را روی تعداد زیادی دیوایس و نسخه های مختلف اندروید تست کنید تا مطمئن شوید اکثر کاربران در استفاده از اپلیکیشن شما به مشکلی برخورد نخواهند کرد.

اگر بخواهید اپ خود را روی اندروید های ۳، ۴، ۵، ۶و ۷ تست کنید، می بایست ۵ گوشی موبایل با سیستم عامل اندروید در اختیار داشته باشید!!!

اگر به این لیست، تبلت را هم اضافه کنیم می شود ۱۰ دیوایس!!! پس عملا غیر ممکن است بتوانیم اپ را روی تمامی دیوایس های حقیقی تست و خطایابی کنیم.

اینجا شبیه ساز یا Emulator به کمک ما می آید. شبیه سازهای متعددی توسط شرکتهای مختلف برای اندروید منتشر شده است.

گوگل هم AVD (Android Virtual Device به معنی دیوایس مجازی اندروید) را به صورت پیش فرض و رایگان درون اندروید استودیو تعبیه کرده است .

System Image های موجود در لیست SDK Platforms فقط مربوط به شبیه ساز AVD اندروید استودیو است.

اگر از سایر شبیه سازها استفاده می کنید نیازی به نصب این سیستم ایمیج ها نیست.

مورد آخر Google APIs می باشد که بازهم بجز مواردی که به آن نیاز دارید، دریافت و نصب آن الزامی نیست.

به طور خلاصه برای من که از شبیه ساز Nox استفاده می کنم.

تنها داشتن Android SDK Platform برای API هایی که تمایل به استفاده دارم، کفایت می کند.

توضیحات در مورد ایزارها :

ابزارهای Android Support Repository و Google Repository :

مجموعه کتابخانه هایی هستند که در حین توسعه اپلیکیشن توسط اندروید استودیو استفاده می شوند.

Google USB Driver :

درایور دیوایس های اندرویدی NEXUS است (گوشی یا تبلت هایی که با برند نکسوس، به سفارش گوگل و توسط کمپانی هایی مانند الجی، سامسونگ و … تولید می شوند).

به وسیله این درایور می توانید دیوایس نکسوس را به رایانه متصل کرده و پروژه اندرویدی خود را روی آن اجرا، تست و خطایابی (دیباگ) کنید.

به عنوان مثال درایور شرکت الجی که قبلا آنرا دانلود کرده ام LGMobileDriver_WHQL_Ver_4.2.0.exe نام دارد.

برای سایر گوشی ها و تبلت های اندروید لازم است درایور کمپانی مربوطه را از وب سایت آن دانلود و نصب کنید.

در اکثر موارد دیوایس های غیر نکسوس نیز با Google USB Driver سازگار میباشد.

نیازی به دانلود و نصب درایور اختصاصی شرکت سازنده نیست.

Build-Tools :

همانطور که از نامش پیداست برای بیلد شدن پروژه استفاده می شود.

SDK-Tools :

شامل ابزار ضروری برای ساخت پروژه اندرویدی.

Platform-Tools :

شامل مجموعه ای از ابزار مختلف مورد نیاز Platform ها.

معرفی کتابخانه والی (Volley)

معرفی کتابخانه والی (Volley)

در مقاله معرفی کتابخانه والی (Volley) شما رو با یکی از کتابخانه های برنامه نویسی اندروید به نام کتابخانه Volley آشنا میکنیم .

کتابخانه VOLLEY در حقیقت کتابخانه ای است که در سال ۲۰۱۳ معرفی شد .

روز به روز به محبوبیت این کتابخانه اضاف میشه . هم اکنون مورد تایید گوگل هست و مرتبا آپدیت های جدید اون توسط گوگل ارائه میشه .

کاربرد و معرفی کتابخانه والی (Volley) :

کتابخانه Volley کتابخانه ای است که کار با سرورها رو در اندروید ساده کرده و مهم تر از همه دارای سرعت بالایی هست .

این سرویس ، پردازش و ذخیره سازی داده ها و درخواست های برنامه نویسان اندرویدی را مدیریت می کند و با ذخیره کردن زمان به آن ها کمک می کند تا کد های لازم و تکراری را بارها و بار ها فراخوانی کنند.

کد های کم تر، به معنی باگ کم تر است که هدف اصلی برنامه نویسان است. منظور ، کد های سمت سرور هست که جایگزین کد های منطق و Async Task است که شما آن ها را برای دریافت پاسخ از API های سمت سرور و نمایش آن ها به شکل مناسب استفاده می کنید .

در Async Task باید Progress window و Progress bar رو در قسمت PreExecute و onPostExecute قرار بدیم .

درسته که این کار سختی نیست اما کسل کننده و زمانبر هست. پس می‌تونیم از سرویس volley به جای Async استفاده کنیم .

مزیت های استفاده ازکتابخانه والی (Volley)

Volley به شکل اتوماتیک تمامی درخواست های سمت سرور را زمان بندی می کند .

volley تمامی در خواست هایی که برنامه ی شما آن ها را اجرا می کند را انجام می دهد و تصویر و پاسخ مورد نظر را از اینترنت برای شما می گیرد .

volley دیسک و حافظه ی شفاف برای ذخیره ی سازی داده ها و کار با دیتابیس رو در اختیار شما قرار می دهد.

Volley امکان کنسل کردن درخواست API را در اختیار شما می گذارد. یعنی که می توانید درخواست تکی و یا مجموعه ای از دستور ها را هم زمان کنسل کنید .

volley توانایی سفارشی کردن بسیار قوی در اختیار شما می گذارد .

volley ابزار هایی برای رفع اشکال و پیگیری دارد .

دو کلاس اصلی در Volley وجود دارد :

Request-queue

Request

Request-queue : این دقیقا هدف درخواستی شما در سمت سرور است و می توانید این صف درخواست را موقع نیاز ایجاد کنید اما بهتر است در زمان شروع این کار را انجام دهید و از آن به عنوان singleton استفاده کنید.

Request : شامل تمامی جزئیاتی است که برای فراخوان API در شبکه مورد استفاده قرار می گیرند. برای مثال ، از متد GET یا POST در Data request برای انتقال Voice response وError response به کار می رود.

به شکل زیر دقت کنید .

معرفی کتابخانه والی (Volley)

تمامی درخواست های قبلی در کش حافظه میمونه و زمانی که ما درخواستی رو ارسال میکنیم ، ابتدا حافظه کش رو بررسی میکنه و اگر موجود باشه خیلی سریع به درخواست پاسخ میده .

این کار باعث میشه که سرعت فوق العاده بالا بره چون فاصله زمانی ارسال درخواست تا دریافت پاسخ کم میشه .

اگر بخواید والی رو با Async Task که قبلا برای کدنویسی سمت سرور استفاده میشد مقایسه کنید ، مثل این میمونه که بخواید cpu پنتیوم 4 قدیمی رو با سی پی یو cori7 نسل جدید مقایسه کنید .

کار با والی در اندروید برای معرفی کتابخانه والی (Volley) :

مثال استفاده از کتابخانه والی برای ارسال ایمیل :

قدم اول : نوشتن کدهای سمت سرور با php در هاست واقعی

<?php

	$name=$_POST['Name'];
	$email=$_POST['Email'];
	$message=$_POST['Message'];

	$to="YOUR EMAIL ADDRESS";
	$subject="Message From elecomco.com";
	$body="name: $name \n email: $email \n message: $message ";
	mail($to,$subject,$body);

?>

به جای Your Email Address ایمیل خودتان را بنویسید .

متغیرهای تعریف شده در PHP در برنامه اندروید توسط کتابخانه والی به سمت سرور ارسال شده و مقدار دهی میشوند .

متغیر body بدنه ایمیل ارسالی را مشخص میکند که در اینجا شامل 3 متغیر نام ، ایمیل و پیام فرستنده میباشد .

قدم دوم : باز کردن یک پروژه اندروید و افزودن کتابخانه والی

توضیحات بیشتر و راهنمای استفاده از کتابخانه والی در سایت گیت هاب

شرکتهای مختلفی کتابخانه والی را ارائه کرده اند . پیشنهاد ما یکی از 2 کتابخانه زیر میباشد :

ورژن کتابخانه ها بستگی به زمان استفاده شما دارد .

implementation 'com.mcxiaoke.volley:library:1.0.19'
or 
implementation 'com.android.volley:volley:1.0.0'

قدم سوم : دادن مجوز دسترسی به اینترنت در منیفست پروژه قبل از تگ Application در فایل منیفست

<uses-permission android:name="android.permission.INTERNET"/>

قدم چهارم : طراحی لی اوت

بهتر است رنگ ها و متن ها را در فایل های string و color در پوشه Value ذخیره کنید .

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityEmail">

        <EditText
            android:id="@+id/ed_message_name"
            android:inputType="text"
            android:hint="@string/hintYourName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/ed_message_email"
            android:inputType="text"
            android:hint="@string/hintYourEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/ed_message_text"
            android:inputType="text"
            android:hint="@string/hintYourMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    <ImageButton
        android:id="@+id/btn_send"
        android:onClick="btnSendClick"
        android:layout_gravity="center"
        android:layout_marginTop="90dp"
        android:tint="@color/colorAccent"
        android:src="@drawable/ic_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

قدم پنجم : کدنویسی جاوا

package elecomco.com.sendemail.activity;

import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

import elecomco.com.sendemail.R;

public class ActivityEmail extends AppCompatActivity {

    private EditText edName,edEmail,edMessage;
	//Insert your php file Address In your Host for example -> https://your site address/Your Folder Name/Your File.php
    String url="";
    private String errorSendText="پیام ارسال نشد";
    private String successSendText="پیام شما با موفقیت ارسال شد";

    RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_email);

        edName=findViewById(R.id.ed_message_name);
        edEmail=findViewById(R.id.ed_message_email);
        edMessage=findViewById(R.id.ed_message_text);

        requestQueue= Volley.newRequestQueue(this);
    }

    public void btnSendClick(final View view) {
        final String name, email, message;
        name = edName.getText().toString();
        email = edEmail.getText().toString();
        message = edMessage.getText().toString();

        if (edName.getText().toString().isEmpty()) {
            String nameError = "نام خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, nameError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        } else if (edEmail.getText().toString().isEmpty()) {
            String emailError = "ایمیل خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, emailError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        } else if (edMessage.getText().toString().isEmpty()) {
            String messagelError = "پیام خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, messagelError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        }

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Snackbar snackbar = Snackbar.make(view, successSendText, Snackbar.LENGTH_LONG);
                View view1 = snackbar.getView();
                view1.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                snackbar.show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Snackbar snackbar = Snackbar.make(view, errorSendText, Snackbar.LENGTH_LONG);
                View view1 = snackbar.getView();
                view1.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                snackbar.show();
            }
        })
        {
            @Override
            protected Map<String, String> getParams() {
                Map<String,String> Data=new HashMap<>();
                Data.put("Name",name);
                Data.put("Email",email);
                Data.put("Message",message);
                return Data;
            }
        };

        requestQueue.add(stringRequest);

    }

}

در متغیر url آدرس فایل php را که در هاست قرار دادیم مشخص میکنیم .

یک آبجکت از کلاس StringRequest ایجاد میکنیم و در متد onResponse آن پیام موفقیت آمیز بودن ارسال ایمیل را مینویسیم . در اینجا من به جای Toast از Snackbar استفاده کرده ام .

متد onResponse زمانی فراخوانی میشود که عملیات موفقیت آمیز باشد .

متد onErrorResponse نیز زمانی فراخوانی میشود که ارتباط با سرور به هر دلیلی برقرار نشود .

آبجکتی که از کلاس RequestQueue میسازیم درخواست ها را در صف قرار میدهد .

توسط تابع getParams مقادیر را به سمت سرور ارسال میکنیم .

این 3 متغیر در واقع جایگزین همان متغیرهای php میشود که در سمت سرور کدنویسی کرده بودیم .

با امید به اینکه معرفی کتابخانه والی (Volley) مورد رضایت شما عزیزان قرار گرفته باشد . در دوره آموزش صفر تا صد برنامه نویسی اندروید چندین پروژه کاربردی با استفاده از کتابخانه والی انجام شده است .

RXJava و برنامه نویسی reactive

RxJava یا برنامه نویسی reactive در اندروید :

مفهوم الگوی طراحی Observer چیست؟

برنامه نویسی Reactive در اندروید چیست ؟

چرا باید از برنامه نویسی Reactiveاستفاده کنیم؟

الگوی طراحی Observer :

برای درک بهتر با مثال شروع میکنیم . فرض کنید شما از مطالب یک کانال در یوتیوب خیلی خوشتون میاد و دوست دارید هر وقت مطلب جدیدی توی اون کانال منتشر میشه مطلع بشید. یک راه این هست که مرتب به اون کانال سر بزنید تا مطالبش رو از دست ندید ولی راه خوبش این هست که شما توی اون کانال subscribe کنید . حالت دوم در واقع همون الگوی طراحی Observer است .

به کانال مبدا Observable یا Publisher میگیم و به شما که subscribe کردید تا هر وقت مطلب جدید اومد مطلع بشید Observer یا Subscriber میگیم. در دنیای برنامه نویسی Observable و Observer هر دو کلاسهایی هستند که ازشون Object ساخته میشه.

یک کلاس Observable دیتا رو منتشر (Publish) میکنه و یک کلاس Observer دیتای منتشر شده توسط کلاس Observable رو میگیره .

توجه کنید که کلاس Observer تا وقتی برای دریافت دیتا از کلاس Observable سابسکرایب(Subscribe) نکرده باشه دیتایی رو دریافت نمیکنه.

برنامه نویسی Reactive در اندروید :

وقتی گفته میشه که در اندروید از برنامه نویسی Reactive استفاده کردیم منظور اینه که برای کارهای مختلف  Observable ها و Observer ها رو به کار بردیم. مثلا فرض کنید قراره یک سری دیتا رو در RecyclerView نمایش بدیم .

برای اینکار اگه بخوایم از برنامه نویسی Reactive استفاده کنیم میتونیم یک Observable داشته باشیم که دیتای مورد نظر ما رو Publish کنه و یک Observer داشته باشیم که دیتای منتشر شده رو بگیره و در RecyclerView نمایش بده .

همانطور که قبلا اشاره کردم Observer با دیتایی که میگیره یک کاری انجام میده مثلا توی این مثال دیتا رو در RecyclerView نمایش میده .

ممکنه در جای دیگه دیتایی رو که گرفته توی دیتابیس ذخیره کنه و یا هر کار دیگه ای رو با دیتایی که میگیره انجام بده.

یک Observable میتواند هر تعداد Observer یا Subscriber داشته باشد. هر وقت Observable یک آیتم دیتای جدید رو منتشر کنه متد OnNext هر کدام از Subscriber ها فراخوانی میشود .

هر وقت Observable کار انتشار کل دیتای مورد نظرش رو به طور موفق انجام بدهد متدOnComplete هر کدام از Subscriber ها فراخوانی میشود .

هر وقت Observable موقع انتشار دیتای خود با مشکل مواجه شود متد OnError هر کدام از Subscriber ها فراخوانی میشود .

چرا استفاده از برنامه نویسی Reactive ؟

استفاده از برنامه نویسی Reactive در اندروید ، باعث میشه برای کارهای پیچیده کد کمتری بنویسید و در نتیجه خوانایی کدهاتون افزایش پیدا میکنه و همین امر باعث میشه که دیباگ برنامه و پیدا کردن خطا راحت تر انجام بشه .

علاوه بر این موارد ، موقعی که در برنامه هاتون ازMultithreading استفاده میکنید کارتون خیلی راحت میشه .

برای مثال شما میتوانید بگید که Observable دیتای خود را در ترد بک گراند تولید کنه وObserver درmain thread دیتا را دریافت کرده و از آنها استفاده کند .

یک مثال ساده از RXJava و برنامه نویسی reactive در اندروید :

1 . در گوگل سرچ کنید :

rxandroid github

2 . لینک زیر را باز کنید :

ReactiveX/RxAndroid: RxJava bindings for Android – GitHub

در اینجا میتوانید توضیحات مفصل RXJava و برنامه نویسی reactive در اندروید را مشاهده کنید .

3 . یک پروژه جدید ایجاد کنید و کتابخانه های زیر را به گردل مربوط به پروژه اضاف کنید :

توجه : ورژن این 2 کتابخانه بستگی به زمان استفاده شما دارد .

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'

4 . طراحی لی اوت (activity_main.xml) :

فایل لی اوت را به شکل زیر طراحی کنید .

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txt"
        android:text="Click Button To Subscribe"
        android:textSize="24sp"
        android:textStyle="bold"
        android:layout_marginTop="80dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/subscribe"
        android:text="subscribe"
        android:onClick="subscribeNow"
        android:layout_marginTop="160dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

5 . کدهای مربوط به (MainActivity.java) :

package elecomco.com.rxjavaapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {


    private TextView txt;

    private Observable<String> mObservable;
    private Observer<String> mObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txt=findViewById(R.id.txt);

        mObservable=Observable.just("Hello from RXandroid");
        mObserver=new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                txt.setText(s);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };


    }

    public void subscribeNow(View view){
        mObservable.subscribe(mObserver);
    }

}

6 . اجرای برنامه :

RXJava و برنامه نویسی reactive
RXJava و برنامه نویسی reactive
RXJava و برنامه نویسی reactive

توضیحات :

تعریف های متغیرهای زیر برای Observable و Observer کردن :

private Observable mObservable;

private Observer mObserver;

تعریف تابع subscribeNow برای سابسکرایب کردن :

public void subscribeNow(View view){
mObservable.subscribe(mObserver);
}

توسط تابع just رشته Hello from RXandroid را هنگام سابسکرایب کردن در TextView مربوطه نمایش میدهیم .

برای اینکار در متد onNext متن مربوطه را تنظیم میکنیم .

در آخر با کلیک دکمه متن مربوطه با سابسکرایب کردن نمایش داده میشود .

مبحث RXJava و برنامه نویسی reactive به همراه معماری MVP و کار با آنها در کنار هم ، در دوره صفر تا صد اندروید به صورت کامل با انجام یک پروژه حرفه ای ، آموزش داده شده است