MVP+RXJAVA+Retrofit+Fresco实现简单的效果

package com.example.rxjavakuangjia1.utils;

/**
 * Created by HP on 2017/12/5.
 */

public class BaseUrl {
    public static String url="http://api.tianapi.com/";

}

首先先写下接口类

package com.example.rxjavakuangjia1.utils;

import com.example.rxjavakuangjia1.bean.Bean;

import retrofit2.http.GET;
import rx.Observable;

/**
 * Created by HP on 2017/12/5.
 */

public interface BaseRetrofit {
    @GET("nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10")

    Observable<Bean> getCall();
    //@Query("key")int key,@Query("num")String num
}
然后使用Retrofit拼接接口



生成bean类这里就不写了

package com.example.rxjavakuangjia1.view;

import com.example.rxjavakuangjia1.bean.Bean;

/**
 * Created by HP on 2017/12/5.
 */

public interface IView {
    void show(Bean bean);
}
然后去生成view层的东西

package com.example.rxjavakuangjia1.model;

import com.example.rxjavakuangjia1.bean.Bean;
import com.example.rxjavakuangjia1.utils.BaseRetrofit;
import com.example.rxjavakuangjia1.utils.BaseUrl;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Created by HP on 2017/12/5.
 */

public class Model {
    public void getData(Observer<Bean> observer){
//        OkHttpClient okHttpClient=new OkHttpClient.Builder()
//                .build();
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl(BaseUrl.url)
//                .client(okHttpClient)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        BaseRetrofit baseRetrofit=retrofit.create(BaseRetrofit.class);
        Observable<Bean> observable=baseRetrofit.getCall();
        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

}
再去生成model层

package com.example.rxjavakuangjia1.preseter;

import com.example.rxjavakuangjia1.bean.Bean;
import com.example.rxjavakuangjia1.model.Model;
import com.example.rxjavakuangjia1.view.IView;

import rx.Observer;

/**
 * Created by HP on 2017/12/5.
 */

public class Presenter {
    IView iView;
    private final Model model;

    public Presenter(IView iView) {
        this.iView = iView;
        model = new Model();
    }
    public void GetUrl(){
        model.getData(new Observer<Bean>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Bean bean) {
                iView.show(bean);            }
        });
    }
    public void delete(){
        iView=null;
    }

}
最后去生成perseter类

package com.example.rxjavakuangjia1.utils;

import android.app.Application;

import com.facebook.drawee.backends.pipeline.Fresco;

/**
 * Created by HP on 2017/12/5.
 */

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
如果使用Fresco必须首先进行初始化

package com.example.rxjavakuangjia1;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;

import com.example.rxjavakuangjia1.bean.Bean;
import com.example.rxjavakuangjia1.preseter.Presenter;
import com.example.rxjavakuangjia1.view.IView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import static android.R.attr.data;

public class MainActivity extends AppCompatActivity implements IView {
    private XRecyclerView xrecy;
    private Presenter presenter;
//    private TextView ttt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xrecy = (XRecyclerView) findViewById(R.id.xrecy);
        presenter = new Presenter(this);
        presenter.GetUrl();
    }
    @Override
    public void show(Bean bean) {
        System.out.println("===========" + data + bean);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        xrecy.setLayoutManager(manager);
        xrecy.setAdapter(new Adapter(this, bean));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.delete();
    }
}
再去写下主类

package com.example.rxjavakuangjia1;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.rxjavakuangjia1.bean.Bean;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

/**
 * Created by HP on 2017/12/5.
 */

public class Adapter extends XRecyclerView.Adapter<Adapter.MyViewHolder>{
    Context context;
    private  TextView tv;
//    private List<Bean.NewslistBean> data;
    private Bean bean;
//    private ImageView sim;
    private SimpleDraweeView sim;

    public Adapter(Context context,  Bean bean) {
        this.context=context;
        this.bean=bean;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(context,R.layout.item,null);
        MyViewHolder holder=new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        tv.setText(bean.getNewslist().get(position).getTitle());
//        sim.setImageURI(bean.getNewslist().get(position).getPicUrl());
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setUri(bean.getNewslist().get(position).getPicUrl())
                .setAutoPlayAnimations(true)
                .build();
        sim.setController(controller);
//        Glide.with(context).load(bean.getNewslist().get(position).getPicUrl()).into(sim);
    }



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

        public MyViewHolder(View itemView) {
            super(itemView);
            //img = itemView.findViewById(R.id.img);
            tv = itemView.findViewById(R.id.tv);
            sim=itemView.findViewById(R.id.sim);
        }
    }

}
这个便是适配器类

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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" android:orientation="vertical"
    tools:context="com.example.rxjavakuangjia1.MainActivity">
    <!--<TextView-->
        <!--android:id="@+id/ttt"-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content" />-->

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xrecy"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.jcodecraeer.xrecyclerview.XRecyclerView>

</LinearLayout>
这个是主类的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">
  <TextView
      android:id="@+id/tv"
      android:text="2323"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/sim"
        fresco:roundAsCircle="true"
        android:layout_width="100dp"
        android:layout_height="100dp" />
  <!--<ImageView-->
      <!--android:id="@+id/imager"-->
      <!--android:background="@mipmap/ic_launcher"-->
      <!--android:layout_weight="2"-->
      <!--android:layout_width="match_parent"-->
      <!--android:layout_height="wrap_content" />-->

</LinearLayout>
这个是item的布局

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'io.reactivex:rxjava:1.2.1'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    //okhttp依赖
    compile 'com.squareup.okhttp3:okhttp:3.9.0'
    compile 'com.squareup.okio:okio:1.13.0'
    compile 'com.facebook.fresco:fresco:0.11.0'
    compile 'com.jcodecraeer:xrecyclerview:1.3.2'
    compile 'com.github.bumptech.glide:glide:4.0.0'
}
最后在把导入的依赖写上吧算是有头有尾吧


  • 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、付费专栏及课程。

余额充值