امیرمحسن کسایی
امیرمحسن کسایی
خواندن ۳ دقیقه·۵ سال پیش

آموزش 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) // 1
Call<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&quot
xmlns:app=&quothttp://schemas.android.com/apk/res-auto&quot
xmlns:tools=&quothttp://schemas.android.com/tools&quot
android:layout_width=&quotmatch_parent&quot
android:layout_height=&quotmatch_parent&quot
android:padding=&quot8dp&quot
tools:context=&quot.MainActivity&quot>
<android.support.v4.widget.NestedScrollView
android:layout_width=&quotmatch_parent&quot
android:layout_height=&quotmatch_parent&quot>
<TextView
android:id=&quot@+id/text_view_result&quot
android:layout_width=&quotwrap_content&quot
android:layout_height=&quotwrap_content&quot
android: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;
@Override
protected 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>>() {
@Override
public 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);
}
}
@Override
public 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


اندرویدrestapi
عشق در نگاه اول وجود داره هه!!! منم عاشق #کامپیوتر شدم :)آیدی تلگرام Contact98
شاید از این پست‌ها خوشتان بیاید