MVP+Retrofit+RXJAVA(新)

本文介绍了一个基于Retrofit实现网络请求的例子,并结合MVP架构模式进行了解析。通过具体的代码展示了如何定义API接口、创建Retrofit实例、实现数据模型层、业务逻辑层以及视图层交互。

APi
public interface Api {
@GET
io.reactivex.Observable getData(@Url String url);
}
Retrofit
public class OkHttpRetrofit {

public final Api api;

private OkHttpRetrofit(){
    final Retrofit build=new Retrofit.Builder()
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://172.17.8.100/")
            .build();
    api = build.create(Api.class);

}
static class RetrofitUtils{
    private static OkHttpRetrofit okUtilsRetrofit=new OkHttpRetrofit();
}
//danli
public static OkHttpRetrofit getdanli() {
    return RetrofitUtils.okUtilsRetrofit;
}

}
MVP
interface接口
public interface IMainView {
void onSuccess(Object o);
}
public interface IModel {
void get(String url,Class aClass,NewCallBack newCallBack);
interface NewCallBack{
void onSuccess(Object o);
}
}
public interface IPresenter {
void get(String url,Class aClass);
}
Model
public class Model implements IModel {

private final OkHttpRetrofit getdanli;

public Model(){
    getdanli = OkHttpRetrofit.getdanli();
}

@Override
public void get(String url, final Class aClass, final NewCallBack newCallBack) {
    getdanli.api.getData(url)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new Observer<ResponseBody>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(ResponseBody responseBody) {
                    Gson gson=new Gson();
                    try {
                        final Object o = gson.fromJson(responseBody.string(), aClass);
                        newCallBack.onSuccess(o);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });
}

}
Presenter
public class Presenter implements IPresenter {
IMainView iMainView;
private final Model model;

public Presenter(IMainView iMainView) {
    this.iMainView = iMainView;
    model = new Model();
}

@Override
public void get(String url, Class aClass) {
    model.get(url, aClass, new IModel.NewCallBack() {
        @Override
        public void onSuccess(Object o) {
            iMainView.onSuccess(o);
        }
    });
}

}
MianView
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.shou, container, false);
unbinder = ButterKnife.bind(this, view);
GridLayoutManager gridLayoutManager=new GridLayoutManager(getActivity(),2);
bigRecycler.setLayoutManager(gridLayoutManager);
presenter=new Presenter(this);
butSou.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name=editSou.getText().toString();
presenter.get(“small/commodity/v1/findCommodityByKeyword?page=1&count=10&keyword=”+name,ShouBean.class);
}
});
return view;
}

@Override
public void onSuccess(Object o) {
    Log.e("ABD",""+o);
    if (o instanceof ShouBean){

        ShouBean shouBean= (ShouBean) o;
        List<ShouBean.ResultBean> result=shouBean.getResult();
        shouAdapter = new ShouAdapter(getActivity());
        bigRecycler.setAdapter(shouAdapter);
        shouAdapter.setList(result);
    }
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
}

}
适配器
public class ShouAdapter extends RecyclerView.Adapter<ShouAdapter.ViewHolder> {
private Context context;
private List<ShouBean.ResultBean> result;

public ShouAdapter(Context context) {
    this.context = context;
    result=new ArrayList<>();
}

public void setList(List<ShouBean.ResultBean> result) {
    this.result = result;
    notifyDataSetChanged();
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view=LayoutInflater.from(context).inflate(R.layout.shou_item,null);
    ViewHolder viewHolder=new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    viewHolder.name.setText(result.get(i).getCommodityName());
    viewHolder.price.setText(result.get(i).getPrice()+"");
    Uri uri=Uri.parse(result.get(i).getMasterPic());
    viewHolder.img.setImageURI(uri);
}

@Override
public int getItemCount() {
    return result.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {

    private final SimpleDraweeView img;
    private final TextView name;
    private final TextView price;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        img = itemView.findViewById(R.id.simp_img);
        name = itemView.findViewById(R.id.shou_name_text);
        price = itemView.findViewById(R.id.shou_price_text);

    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值