Android开发记录(五)-Retrofit+LiveData+ViewModel

结合Retrofit+LiveData+ViewModel,访问网路数据并展示

  1. 编写请求接口

public interface HomeRequest {
    @GET("banner/json")
    Call<BaseResponse<List<BannerResponse>>> getBanner();
    @GET("article/top/json")
    Call<BaseResponse<List<TopResponse>>> getTop();
}
  1. 在ViewModel中访问网络请求数据,并且通过LiveData将数据发送给监听者,wanandroid数据结构统一,编写消息基类

public class BaseResponse<T> {
    public T data;
    public int errorCode;
    public String errorMsg;

    public BaseResponse(T data, int errorCode, String errorMsg) {
        this.data = data;
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}
  1. 完整ViewModel代码

import android.app.Application;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import com.jetpack.demo.common.Constant;
import com.jetpack.demo.model.BaseResponse;
import com.jetpack.demo.model.RetrofitUtil;
import com.jetpack.demo.model.home.BannerResponse;
import com.jetpack.demo.model.home.HomeRequest;
import com.jetpack.demo.model.home.TopResponse;

import org.jetbrains.annotations.NotNull;

import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class HomeViewModel extends AndroidViewModel {
    private MutableLiveData<List<BannerResponse>> bannerLD;
    private MutableLiveData<List<TopResponse>> topLD;
    private HomeRequest request;
    public HomeViewModel(@NonNull @NotNull Application application) {
        super(application);
        request = RetrofitUtil.getInstance().getRetrofit().create(HomeRequest.class);
    }

    public MutableLiveData<List<TopResponse>> getTopLD() {
        if (topLD == null){
            topLD = new MutableLiveData<List<TopResponse>>();
        }
        return topLD;
    }

    public void setTopLD(MutableLiveData<List<TopResponse>> topLD) {
        this.topLD = topLD;
    }

    public MutableLiveData<List<BannerResponse>> getBannerLD() {
        if (bannerLD == null){
            bannerLD = new MutableLiveData<List<BannerResponse>>();
        }
        return bannerLD;
    }

    public void setBannerLD(MutableLiveData<List<BannerResponse>> bannerLD) {
        this.bannerLD = bannerLD;
    }
// TODO: Implement the ViewModel
    public void getBanner(){
        Call<BaseResponse<List<BannerResponse>>> call = request.getBanner();
        call.enqueue(new Callback<BaseResponse<List<BannerResponse>>>() {
            @Override
            public void onResponse(Call<BaseResponse<List<BannerResponse>>> call, Response<BaseResponse<List<BannerResponse>>> response) {
                if (response.body().errorCode == Constant.HTTP_CODE_OK){
                    bannerLD.postValue(response.body().data);
                }
            }

            @Override
            public void onFailure(Call<BaseResponse<List<BannerResponse>>> call, Throwable t) {

            }
        });
    }
    public void getTop(){
        Call<BaseResponse<List<TopResponse>>> call = request.getTop();
        call.enqueue(new Callback<BaseResponse<List<TopResponse>>>() {
            @Override
            public void onResponse(Call<BaseResponse<List<TopResponse>>> call,
                                   Response<BaseResponse<List<TopResponse>>> response) {
                if (response.body().errorCode == Constant.HTTP_CODE_OK){
                    topLD.postValue(response.body().data);
                }
            }

            @Override
            public void onFailure(Call<BaseResponse<List<TopResponse>>> call, Throwable t) {

            }
        });
    }
}
  1. 在Activity中获取数据并展示

        mViewModel = new ViewModelProvider(this).get(HomeViewModel.class);
        mViewModel.getBannerLD().observe(getActivity(), new Observer<List<BannerResponse>>() {
            @Override
            public void onChanged(List<BannerResponse> bannerResponses) {
                Log.i(TAG,"bannerResponses = "+bannerResponses.size());
            }
        });
        mViewModel.getTopLD().observe(getActivity(), new Observer<List<TopResponse>>() {
            @Override
            public void onChanged(List<TopResponse> topResponses) {
                Log.i(TAG,"topResponses = "+topResponses.size());
            }
        });
        mViewModel.getBanner();
        mViewModel.getTop();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值