آموزش Retrofit 2 رتروفیت

سلام , بعد مدت ها برگشتم ویرگول مدتی بود سرم شلوغ بود درگیر درس های ترم آخر بودم , و الان هم مشغول توسعه استارت آپ جدیدم ... کتابخانه های زیادی در مورد ارتباط با سرور از طریق پرتوکل HTTP برای اندروید وجود داره از جمله Volley و ... هر کدوم از این کتابخانه ها برای کارهای خاصی استفاده میشه .. کتابخانه Retrofit کار جالبی که کرده این هست که پیچیدگی های برنامه نویسی در ارتباط با سرور رو کم کرده و برنامه نویس متمرکز میشه بر کارایی اصلی برنامه تا پیچیدگی های ارتباط با سرور , رتروفیت بر مبنای REST API هست و با ایجاد یک چارچوب کلی می توانید API را کنترل کنید .. در این پست من از سایت jsonplaceholder.typicode.com نمونه API برای تست هست استفاده می کنمبرای حمایت از من اپلیکیشن جستجو رو دانلود کنیددانلود اپلیکیشن جستجو | موتور جستجوی محتوای دانلود فارسیدانلود برنامه جستجو از مایکت :https://myket.ir/app/com.jostjoمقاله معرفی اپلیکیشن جستجو در ویرگول :http://vrgl.ir/V4Y8Aابتدا رتروفیت را از طریق راهنمای سایت https://square.github.io/retrofit/ نصب کنید شما یک Url برای API خود دارید مثلا www.yourapi.com/test قسمت Bold شده Base URL هست بعد آن API مورد نظر شما هست . در سایت تست ما راهنمایی لازم درباره آدرس API ها و پارامتر های ارسالی گفته شده ابتدا شما باید کلاس POST را ایجاد کنید طبق JSON که دریافت می کنید باید مطابق آن یک کلاس جاوا را درست کنید سایت http://www.jsonschema2pojo.org/ با دادن JSON مستقیم کلاس جاوا تولید میکنه چقدر هم عالیimport com.google.gson.annotations.SerializedName;public class Post {private int userId;private int id;private String title;@SerializedName(&quotbody&quot)private String text;public int getUserId() {return userId;}public int getId() {return id;}public String getTitle() {return title;}public String getText() {return text;}}یک اینتر فیس ایجاد کنید در اینترفیسی که ایجاد کرده اید باید API های مورد نظر خود را بنویسید. خیلی راحت شما با نوتیشن ها API را کنترل می کنید . import java.util.List;import retrofit2.Call;import retrofit2.http.GET;public interface JsonPlaceHolderApi {@GET(&quotposts&quot) // 1Call<List<Post>> getPosts(); //2ابتدا با نوتیشین GET@ مشخص میکنیم نوع درخواست ما از GET هست و API خود را وارد میکنیم که در اینجا posts هست jsonplaceholder.typicode.com/posts در اینجا هیچ پارامتری ارسال نمی کنیم در قسمت بعدی توضیح میدهم در مورد ارسال پارامتر ها یک Layout ایجاد میکنیم برای نمایش اطلاعات <?xml version=&quot1.0&quot encoding=&quotutf-8&quot?><android.support.constraint.ConstraintLayout xmlns:android=&quothttp://schemas.android.com/apk/res/android&quotxmlns:app=&quothttp://schemas.android.com/apk/res-auto&quotxmlns:tools=&quothttp://schemas.android.com/tools&quotandroid:layout_width=&quotmatch_parent&quotandroid:layout_height=&quotmatch_parent&quotandroid:padding=&quot8dp&quottools:context=&quot.MainActivity&quot><android.support.v4.widget.NestedScrollViewandroid:layout_width=&quotmatch_parent&quotandroid:layout_height=&quotmatch_parent&quot><TextViewandroid:id=&quot@+id/text_view_result&quotandroid:layout_width=&quotwrap_content&quotandroid:layout_height=&quotwrap_content&quotandroid:textColor=&quot#000&quot /></android.support.v4.widget.NestedScrollView></android.support.constraint.ConstraintLayout>وارد MainActivity میشویم حالا با ایجاد یک شی از نوع کلاس Retrofit و وصل کردن به اینترفیس چند قدم دیگر مانده ...import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;public class MainActivity extends AppCompatActivity {private TextView textViewResult;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textViewResult = findViewById(R.id.text_view_result);Retrofit retrofit = new Retrofit.Builder().baseUrl(&quothttps://jsonplaceholder.typicode.com/&quot).addConverterFactory(GsonConverterFactory.create()).build();JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);Call<List<Post>> call = jsonPlaceHolderApi.getPosts();call.enqueue(new Callback<List<Post>>() {@Overridepublic void onResponse(Call<List<Post>> call, Response<List<Post>> response) {if (!response.isSuccessful()) {textViewResult.setText(&quotCode: &quot + response.code());return;}List<Post> posts = response.body();for (Post post : posts) {String content = &quot"content += &quotID: &quot + post.getId() + &quot\n"content += &quotUser ID: &quot + post.getUserId() + &quot\n"content += &quotTitle: &quot + post.getTitle() + &quot\n"content += &quotText: &quot + post.getText() + &quot\n\n"textViewResult.append(content);}}@Overridepublic void onFailure(Call<List<Post>> call, Throwable t) {textViewResult.setText(t.getMessage());}});}}متد enqueue را صدا زده و اگه همه چی درست بود در متد onResponse همه چی را کنترل کنید . در اینترفیس ما لیستی از پست ها را خواستیم ودر متد onResponse باید Body را دریافت کنیم و در لیستی از post ها منتسب کنیم List<Post> posts = response.body();سوالات خود را درقسمت کامنت ها یا در تلگرام بپرسید https://t.me/contact98 بخش بعدی آموزش کنترل پارامترهای ارسالی به API