آموزش استفاده از Retrofit در اندروید

آموزش استفاده از Retrofit در اندروید

Retrofit چیست ؟

خیلی کوتاه و مختصر بخوام توضیح بدم ، با استفاده از کتابخانه رتروفیت میتونید اطلاعاتی که از سرور به صورت json یا هرچیزه دیگری دریافت کنید رو بگیرید .

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

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


و اما آموزش استفاده از کتابخانه Retrofit

  • برای استفاده اول کتابخانه های زیر را به Gradle پروژتون اضافه کنید



        implementation 'com.squareup.retrofit2:retrofit:2.5.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.4.0'


  • ما در نظر داریم اطلاعات User هایی که که در سرور هستند رو بگیریم که داری فیلدهای Id و Name و Family هستند .
  • برای شروع یک مدل به نام Users به شکل زیر میسازیم



public class Users implements Serializable {


    @SerializedName("ID")
    private String id;

    @SerializedName("NAME")
    private String name;

    @SerializedName("FAMILY")
    private String family;



    public Users() {

    }


    public String getFamily() {
        return family;
    }

    public void setFamily(String family) {
        this.family = family;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}


همانطور که مشاهده میکنید بالای هر متغیر SerializedName@ نوشته شده است .
اگر با والی یا کتابخانه هایی که قبل از رتروفیت ساخته شده اند کار کرده باشید ، متوجه میشدید که زمانی که میخواهید اطلاعات رو از جیسون بگیرید ، باید نام متغیر جیسون مورد نظر رو مینوشتید و مدلی که ساختید set یا تنظیم میکردید .

وظیفه ی SerializedName@ دقیقا همین است . یعنی نام متغیرهای جیسون ما برای مثال ID و NAME و FAMILY میباشد .



  • حالا میریم سراغ ساخت APIService هایی که توسط برنامه نویس وب به ما داده شده است ، که به شکل زیر طراحی میکنیم



       public interface ApiService {

    @GET("/api/v1/getUsers")
    Call<ArrayList<Users>> getUsers(
               ///www.phoenixdevs.ir/api/v1/getname?id=----
    );



    @POST("/api/v1/setuser")
    @FormUrlEncoded
    Call<Users> setUser(@Field("title") String title,
                        @Field("body") String body,
                        @Field("userId") long userId);



    @GET("/api/v1/user/{id}")    // www.phoenixdevs.ir/api/v1/2?api_key=123123123
    Call<Users> getUserDetails(@Path("id") int id, @Query("api_key") String apiKey);



    @DELETE("/api/v1/deleteuser/{id}")
    Call<String> deletePost(@Path("id") long id);



}

خب ، فکر میکنم با کامنت گذاری که کردم ، نیازی به توضیح نباشه .

شما با استفاده از Get@ یا Post@ یا Delete@ میتونید سرویسهای مخصوص به اپلیکیشن خودتون رو بسازید .

  • حالا باید یک کلاسی به نام RetrofitBuilder به شکل زیر بسازیم تا بتونیم APIService فوق رو صدا بزنیم .



       public class RetrofitBulider {


    public static final String BASE_URL = "https://www.phoenixdevs.ir";
    public static Retrofit myRetrofit = null;

    private static Retrofit getClient() {



        if (myRetrofit == null) {
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .readTimeout(30, TimeUnit.SECONDS)
                    .connectTimeout(30, TimeUnit.SECONDS)
                    .build();

            myRetrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(okHttpClient)
                    .build();

        }

        return myRetrofit;
    }



    public static ApiService getApiService() {
        if (myRetrofit == null) getClient();
        return myRetrofit.create(ApiService.class);
    }


}

خب همانطور که مشاهده میکنید اول ما okHttpClient ساختیم برای TimeOut ! یعنی مثلا میخواهیم سرویسی که ساختیم ۳۰ ثانیه تلاش کنه وصل بشه ، و اگر بعد از ۳۰ ثانیه نتونست متصل بشه ارور برای ما ارسال کنه .

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

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



  • همانطور که در سورس فوق مشاهده کردید تابعی به نام getApiService ساخته شده است که کلاس رابط APIService رو که ساخته ایم برای ما برگشت میزند . برای فهمیدن بیشتر لطفا یک بار دیگر به تابع زیر نگاه کنید .




    public static ApiService getApiService() {
        if (myRetrofit == null) getClient();
        return myRetrofit.create(ApiService.class);
    }



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

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




        RetrofitBulider.getApiService().getUsers().enqueue(new Callback<ArrayList<Users>>() {
            @Override
            public void onResponse(Call<ArrayList<Users>> call, Response<ArrayList<Users>> response) {


                Toast.makeText(MainActivity.this, ""+response.body().get(0).getName(), Toast.LENGTH_SHORT).show();


            }

            @Override
            public void onFailure(Call<ArrayList<Users>> call, Throwable t) {

            }
        });





اگر با توضیحات بالا که خیلی خلاصه شده بود متوجه نشده اید ، حتما تمرین کنید …

برای دانلود سورس کد لطفا کلیک کنید






دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *