MVP+RxJava+Retrofit

导入依赖

 compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:mediarouter-v7:25.0.0'
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:recyclerview-v7:25.0.0'
    compile 'com.jcodecraeer:xrecyclerview:1.3.2'
    compile 'com.facebook.fresco:fresco:0.12.0'
    compile 'com.facebook.fresco:animated-base-support:0.12.0'

view层

public interface IUserView {
    void getUser(ArrayList<HomeBean.NewslistBean> list);
}

model层
IUserMode 接口

public interface IUserMode {
    void getJson(String url);
}

UserMode 类

public class UserMode  implements IUserMode{
    ArrayList<HomeBean.NewslistBean> list;

    private OnFinish onFinish;

    public interface OnFinish{
        void OnFinishListener(ArrayList<HomeBean.NewslistBean> list);
    }

    public void setOnFinish(OnFinish finish){
        this.onFinish=finish;
    }



    @Override
    public void getJson(String url) {
        list = new ArrayList<>();
        Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
        ApiService apiService = retrofit.create(ApiService.class);
        final Observable<HomeBean> home = apiService.getHome();
        home.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<HomeBean>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(HomeBean homeBean) {
                        list = (ArrayList<HomeBean.NewslistBean>) homeBean.getNewslist();
                        onFinish.OnFinishListener(list);

                    }
                });

    }
}

presenter包

public class UserPresenter implements UserMode.OnFinish{
    private final IUserView userView;
    private final UserMode userModel;

    public UserPresenter(IUserView userView) {
        this.userView = userView;
        this.userModel = new UserMode();
        userModel.setOnFinish(this);
    }

    public void setNews(String url){
        userModel.getJson(url);
    }

    @Override
    public void OnFinishListener(ArrayList<HomeBean.NewslistBean> list) {
        userView.getUser(list);
    }
}

MainActivity 中

public class MainActivity extends AppCompatActivity implements IUserView{
    private XRecyclerView re;
    private List<HomeBean.NewslistBean> data;
    UserPresenter userPresenter;
    private MyAdapter adapter;
    private int page=0;
    private int curr;
    private List<String> list=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        re= (XRecyclerView) findViewById(R.id.xre_xrv);
        userPresenter = new UserPresenter(this);
        userPresenter.setNews(Api.URLONE);
        re.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                curr=0;
                list.clear();
                re.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                page=page+1;
                re.refreshComplete();
            }
        });
    }

    @Override
    public void getUser(ArrayList<HomeBean.NewslistBean> list) {
        adapter = new MyAdapter(MainActivity.this,list);
        re.setAdapter(adapter);
        re.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    }

}

adpater包中

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
        Context context;
    List<HomeBean.NewslistBean> data;
    public MyAdapter(Context context, List<HomeBean.NewslistBean> data) {
        this.context = context;
        this.data = data;
    }
    @Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
        context).inflate(R.layout.item_home, parent,
        false));
        return holder;
        }
public void onBindViewHolder(final MyViewHolder holder, final int position)
        {
        holder.tv.setText(data.get(position).getTitle());
//得到图片的url
        Uri uri= Uri.parse(data.get(position).getPicUrl());
        holder.draweeView.setImageURI(uri);//设置给Fresco
        }
@Override
public int getItemCount()
        {
            return data.size();
        }

class MyViewHolder extends RecyclerView.ViewHolder
{

    TextView tv;
    public SimpleDraweeView draweeView;
    public MyViewHolder(View view)
    {
        super(view);
        tv = (TextView) view.findViewById(R.id.i_text);
        draweeView=(SimpleDraweeView) view.findViewById(R.id.img);

    }
}
}

api包中
Api 类

public class Api {
    public static final String URL="http://mnews.gw.com.cn/wap/data/news/";
    public static final String URLONE = "http://api.tianapi.com/";
}

ApiService 类中

public interface ApiService {
    @GET("tiyu/?key=691dce141baf9b719db22f6382ba5639&num=10")
    Observable<HomeBean> getHome();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVP(Model View Presenter)其实就是一种项目的整体框架,能让你的代码变得更加简洁,说起框架大家可能还会想到MVC、MVVM。由于篇幅原因,这里我们先不讲MVVM,先来看一下MVC。其实Android本身就采用的是MVC(Model View Controllor)模式、其中Model指的是数据逻辑和实体模型;View指的是布局文件、Controllor指的是Activity。对于很多Android初学者可能会有这样的经历,写代码的时候,不管三七二十一都往Activity中写,当然我当初也是这么干的,根本就没有什么框架的概念,只要能实现某一个功能就很开心了,没有管这么多。当然项目比较小还好,一旦项目比较大,你会发现,Activity所承担的任务其实是很重的,它既要负责页面的展示和交互,还得负责数据的请求和业务逻辑之类的工作,相当于既要打理家庭,又要教育自己调皮的孩子,真是又当爹又当妈。。。那该怎么办呢?这时候Presenter这个继父来到了这个家庭。Presenter对Activity说,我来了,以后你就别这么辛苦了,你就好好打理好View这个家,我专门来负责教育Model这孩子,有什么情况我会向你反映的。这时Activity流下了幸福的眼泪,从此,Model、View(Activity)、Presenter一家三口过上了幸福的生活。。。好了磕个药继续,由于Presenter(我们自己建的类)的出现,可以使View(Activity)不用直接和Model打交道,View(Activity)只用负责页面的显示和交互,剩下的和Model交互的事情都交给Presenter做,比如一些网络请求、数据的获取等,当Presenter获取到数据后再交给View(Activity)进行展示,这样,Activity的任务就大大减小了。这便是MVP(Model 还是指的数据逻辑和实体模型,View指的是Activity,P就是Presenter)框架的工作方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值