آموزش جاوا و اندروید

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

آموزش جاوا و اندروید

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

طبقه بندی موضوعی

متد get در رتروفیت

چهارشنبه, ۱۵ بهمن ۱۳۹۹، ۰۸:۲۳ ب.ظ

قدم اول:

برای رتروفیت باید dependency خودش و Gson converter رو اضافه کنیم. Gson converter دیتا مدل جاوا رو به جیسون تبدیل میکنه و برعکس (یعنی جیسون رو از سرور میگیره و به دیتا مدل جاوا تبدیل میکنه). در واقع توی رتروفیت ما با دیتا در قالب جیسون سر و کار نداریم. (در حالی که توی والی باید خودمون جیسون رو به آبجکت جاوایی تبدیل میکردیم و این نقطه مثبت رتروفیت به حساب میاد)

//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//gson converter
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

در فایل گریدل (ماژول) در بلوک android، باید جاوای 8 رو اضافه کنیم:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

 

قدم دوم

یه اینترفیس میسازیم و نوع درخواستی که داریم توسط انوتیشن معرفی میکنیم. کد زیر به این معنی است که یک درخواست Get داریم. در پرانتز get آدرس ریسورس مورد نظر رو میدیم (این آدرس قسمت متغیر url هست). توی قسمت جنریک Call نوع ریسپانس برگشتی رو مینویسیم. در این مثال پاسخ لیستی از Post می باشد.

public interface Service {

    @GET("posts")
    Call<List<Post>> getPosts();
}

 

قدم سوم

آبجکت رتروفیت رو به صورت زیر میسازیم:

retrofit = new Retrofit.Builder()
        .baseUrl(BaseURL.baseURL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

BaseUrl قسمت ثابت URL هست که بصورت زیر تعریف شده:

public class BaseURL {

    public static final String baseURL = "https://jsonplaceholder.typicode.com/";
}

(در این مثال از API سایت jsonplaceholder.typicode.com استفاده شده)

 

قدم چهارم

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

Service service = retrofit.create(Service.class);
Call<List<Post>> callPosts = service.getPosts();

callPosts.enqueue(new Callback<List<Post>>() {
    @Override
    public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
        Log.d(TAG, "onResponse: " + response.body().toString());
        List<Post> posts = response.body();
        for (Post post : posts) {
            txt_view.append(post.toString()+"\n\n\n");
        }
    }

    @Override
    public void onFailure(Call<List<Post>> call, Throwable t) {
        Log.d(TAG, "onFailure: "+t.getMessage());
    }
});

 

کلاس مدل post:

public class Post {

    private int userId;
    private int id;
    private String title;
    private String body;

    public Post(int userId, int id, String title, String body) {
        this.userId = userId;
        this.id = id;
        this.title = title;
        this.body = body;
    }

    //getters and setters

    @Override
    public String toString() {
        return "userId= " + userId +"\n"+
                "id= " + id +"\n"+
                "title= " + title + "\n" +
                "body= " + body;
    }
}

در خروجی پست ها رو در یک تکست ویو چاپ کردم:

 

موافقین ۰ مخالفین ۰ ۹۹/۱۱/۱۵
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی