جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

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

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > استفاده از Retrofit در ViewModel اندروید

استفاده از Retrofit در ViewModel اندروید

1400-05-11
ارسال شده توسط آموزنگار
اندروید
استفاده از Retrofit در ViewModel اندروید

یک آموزش ساده

 درباره ViewModel در اندروید شنیده اید؟ ViewModel اندروید جزء معماری است که برای ذخیره داده های مربوط به رابط کاربری طراحی شده است.باتوجه به وب سایت Android Developer.

کلاس ViewModel برای ذخیره و مدیریت داده های مربوط به رابط کاربری به روش آگاهانه در یک چرخه حیات طراحی شده است. کلاس ViewModel

اجازه می دهد تا داده ها بعد از تغییرات پیکربندی مانند چرخش صفحه باقی بماند.

اگر شما یکی از آخرین آموزش Retrofit ما درباره دریافت داده های JSON  از یک URL به یاد آورید . اکنون اگر یکی از فعالیت های ما داده های مربوط به آن را از سرور دریافت کند ، اما اگر به دلایلی (به عنوان مثال تغییر جهت) فعالیت دوباره ایجاد می شود و داده ها را دوباره از سرور دریافت می کند . دریافت داده مشابه از سرور باعث اتلاف منابع می شود . یک راه حل کارآمد در اینجا جدا کردن مالکیت داده نمایش از منطق کنترل کننده UI است.

بنابراین ، در این آموزش Android View Model همان کاری را که در آموزش Retrofit قبلی انجام دادیم انجام خواهیم داد اما در اینجا از معماری ViewModel استفاده خواهیم کرد.

راه اندازی پروژه اندروید با RecyclerView و Retrofit

ایجاد یک پروژه جدید اندروید استودیو

  • مثل همیشه اولین قدم ایجاد یک پروژه جدید Android Studio است. و در آن پروژه نحوه کار با Android ViewModel را خواهیم دید و در آن پروژه نحوه کار با Android ViewModel را خواهیم دید.
  • من یک پروژه با استفاده از EmptyActivity به نام AndroidViewModel ایجاد کرده ام.

API برای دریافت داده ها

  • در صورت داشتن هر URL می توانید برای دریافت داده ها استفاده کنید. در اینجا قصد دارم از URL زیر استفاده کنم.
https://www.simplifiedcoding.net/demos/marvel
  • URL بالا لیستی از Marvel Super Heroes را برمی گرداند. می توانید URL را باز کنید تا ببینید چه چیزی در حال بازگشت است. این همان نشانی اینترنتی است که هنگام یادگیری Retrofit JSON از آن استفاده کردیم.

افزودن وابستگی مورد نیاز

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

  • RecyclerView – superheroes برای نمایش لیستی از
  • Glide – URL برای بارگیری تصویر از.
  • Retrofit – URL برای دریافت داده از.
  • ViewModel – جزء معماری است.

بنابراین ابتدا تمام وابستگی های ذکر شده در بالا را در فایل build.gradle سطح App اضافه خواهیم کرد.

dependencies {
 
implementation fileTree(include: ['*.jar'], dir: 'libs')
 
implementation 'com.android.support:appcompat-v7:27.1.1'
 
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
 
testImplementation 'junit:junit:4.12'
 
androidTestImplementation 'com.android.support.test:runner:1.0.2'
 
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 
//adding dependencies
 
implementation 'com.android.support:recyclerview-v7:27.1.1'
 
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
 
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
 
 
implementation 'com.github.bumptech.glide:glide:4.3.1'
 
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
 
 
implementation "android.arch.lifecycle:extensions:1.1.0"
 
implementation "android.arch.lifecycle:viewmodel:1.1.0"
 
}

پس از اضافه کردن همه وابستگی ها پروژه تان را sync کنید .

مصاحبه شغلی برنامه نویسان اندروید در گوگل
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

ایجاد کلاس POJO برای Hero

  • یک کلاس جدید به نام java ایجاد کنید و کد زیر را بنویسید.
package com.example.belalkhan.androidviewmodel;
 
public class Hero {
 
private String name;
 
private String realname;
 
private String team;
 
private String firstappearance;
 
private String createdby;
 
private String publisher;
 
private String imageurl;
 
private String bio;
 
public Hero(String name, String realname, String team, String firstappearance, String createdby, String publisher, String imageurl, String bio) {
 
this.name = name;
 
this.realname = realname;
 
this.team = team;
 
this.firstappearance = firstappearance;
 
this.createdby = createdby;
 
this.publisher = publisher;
 
this.imageurl = imageurl;
 
this.bio = bio;
 
}
 
public String getName() {
 
return name;
 
}
 
public String getRealname() {
 
return realname;
 
}
 
public String getTeam() {
 
return team;
 
}
 
public String getFirstappearance() {
 
return firstappearance;
 
}
 
public String getCreatedby() {
 
return createdby;
 
}
 
public String getPublisher() {
 
return publisher;
 
}
 
public String getImageurl() {
 
return imageurl;
 
}
 
public String getBio() {
 
return bio;
 
}
 
}

راه اندازی RecyclerView

ایجاد RecyclerView و RecyclerView Layout

  • حالا وارد xml شوید و یک RecyclerView در اینجا ایجاد کنید ، در این RecyclerView ما لیست Hero را نمایش خواهیم داد.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
  
</RelativeLayout>
  • اکنون همچنین یک فایل منبع layout دیگر برای RecyclerView ایجاد خواهیم کرد .
  • یک فایل منبع layout به نام xml ایجاد کنید و کد xml زیر را بنویسید.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
  
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="200dp" />
  
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />
  
</LinearLayout>

ایجاد آداپتور RecyclerView

  • اکنون ما به آداپتور RecyclerView نیاز داریم. ما قصد داریم از کد زیر برای این کار استفاده کنیم. اگر مطمئن نیستید که در مورد چه چیزی صحبت می کنید ، می توانید آموزش RecyclerView را بررسی کنید.
  • بنابراین کافی است یک کلاس جدید به نام java ایجاد کنید و کد زیر را بنویسید.
package com.example.belalkhan.androidviewmodel;
  
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
  
import com.bumptech.glide.Glide;
  
import java.util.List;
  
public class HeroesAdapter extends RecyclerView.Adapter<HeroesAdapter.HeroViewHolder> {
  
    Context mCtx;
    List<Hero> heroList;
  
    public HeroesAdapter(Context mCtx, List<Hero> heroList) {
        this.mCtx = mCtx;
        this.heroList = heroList;
    }
  
    @NonNull
    @Override
    public HeroViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_layout, parent, false);
        return new HeroViewHolder(view);
    }
  
    @Override
    public void onBindViewHolder(@NonNull HeroViewHolder holder, int position) {
        Hero hero = heroList.get(position);
  
        Glide.with(mCtx)
                .load(hero.getImageurl())
                .into(holder.imageView);
  
        holder.textView.setText(hero.getName());
    }
  
    @Override
    public int getItemCount() {
        return heroList.size();
    }
  
    class HeroViewHolder extends RecyclerView.ViewHolder {
  
        ImageView imageView;
        TextView textView;
  
        public HeroViewHolder(View itemView) {
            super(itemView);
  
            imageView = itemView.findViewById(R.id.imageView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

راه اندازی RecyclerView

  • حالا به java برگردید و کدهای زیر را بنویسید.
public class MainActivity extends AppCompatActivity {
  
    RecyclerView recyclerView;
    HeroesAdapter adapter;
  
    List<Hero> heroList;
  
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        recyclerView = findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }
}
  • اکنون ما Retrofit را برای دریافت داده ها از URL تنظیم می کنیم.

راه اندازی Retrofit

The API Interface

  • یک interface جید java ایجاد کنید .
package com.example.belalkhan.androidviewmodel;
  
import java.util.List;
  
import retrofit2.Call;
import retrofit2.http.GET;
  
public interface Api {
  
    String BASE_URL = "https://simplifiedcoding.net/demos/";
  
    @GET("marvel")
    Call<List<Hero>> getHeroes();
}
  • تا اینجا ما کارهایی را که قبلاً در آموزشهای قبلی آموخته ایم ، انجام می دهیم. اکنون برای بارگذاری داده ها در RecyclerView از معماری ViewModel استفاده خواهیم کرد.
ساخت Splash Screen در اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

استفاده از Android ViewModel برای بارگذاری همزمان داده ها با استفاده از Retrofit

ایجاد ViewModel اندروید

  • برای ایجاد ViewModel ، باید یک کلاس ایجاد کنیم که از کلاس ViewModel ارث بری کند.
  • در اینجا من یک کلاس به نام java ایجاد می کنم.
package com.example.belalkhan.androidviewmodel;
  
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
import android.widget.Toast;
  
import java.util.List;
  
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
  
public class HeroesViewModel extends ViewModel {
  
    //this is the data that we will fetch asynchronously 
    private MutableLiveData<List<Hero>> heroList;
  
    //we will call this method to get the data
    public LiveData<List<Hero>> getHeroes() {
        //if the list is null 
        if (heroList == null) {
            heroList = new MutableLiveData<List<Hero>>();
            //we will load it asynchronously from server in this method
            loadHeroes();
        }
         
        //finally we will return the list
        return heroList;
    }
  
     
    //This method is using Retrofit to get the JSON data from URL 
    private void loadHeroes() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
  
        Api api = retrofit.create(Api.class);
        Call<List<Hero>> call = api.getHeroes();
  
  
        call.enqueue(new Callback<List<Hero>>() {
            @Override
            public void onResponse(Call<List<Hero>> call, Response<List<Hero>> response) {
                 
                //finally we are setting the list to our MutableLiveData
                heroList.setValue(response.body());
            }
  
            @Override
            public void onFailure(Call<List<Hero>> call, Throwable t) {
  
            }
        });
    }
}
  • دریافت (واکشی) با استفاده از قسمت Retrofit در اینجا دقیقاً همان چیزی است که قبلاً در آموزش Retrofit آموخته ایم.
  • و نکته ViewModel بسیار آسان است ، ما فقط متد به نام getHeroes () داریم. در داخل این متد داریم بررسی می کنیم که آیا لیست null است ، بنابراین ما آن را به صورت غیرهم زمان دریافت خواهیم کرد. بخاطر بسپارید که برای ذخیره سازی لیست باید از کلاسهای MutableLiveData و LiveData استفاده کنیم و مابقی را با جزیی از  ViewModel مدیریت می کند. بنابراین نیازی نیست نگران موارد دیگر باشید.

استفاده از  ViewModel اندروید برای نمایش لیست Hero

  • کد زیر را در انتهای متد onCreate () در java بنویسید.
HeroesViewModel model = ViewModelProviders.of(this).get(HeroesViewModel.class);
  
        model.getHeroes().observe(this, new Observer<List<Hero>>() {
            @Override
            public void onChanged(@Nullable List<Hero> heroList) {
                adapter = new HeroesAdapter(MainActivity.this, heroList);
                recyclerView.setAdapter(adapter);
            }
        });

اکنون می توانید برنامه خود را اجرا کنید ، بررسی کنید که آیا کار می کند یا خیر.

ViewModel اندروید

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

https://simplified-coding-downloads.firebaseapp.com/download.html?id=-M-k65o_-mgZyViuAPRE

قبلی معرفی زبان برنامه نویسی کاتلین
بعدی چگونه memory Leak را در برنامه اندروید خود برطرف کنیم؟

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=11084
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط   
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com