MvP_retrofit的封装

来源:互联网 发布:js 设置按钮失效 编辑:程序博客网 时间:2024/06/05 18:17

用到的依赖

compile 'com.squareup.retrofit2:retrofit:2.3.0'compile 'com.squareup.retrofit2:converter-gson:2.3.0'compile 'com.facebook.fresco:fresco:1.5.0'compile 'com.android.support:recyclerview-v7:26.1.0'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'io.reactivex.rxjava2:rxjava:2.1.7'compile 'io.reactivex:rxjava:1.1.1'compile 'io.reactivex:rxandroid:1.1.0'compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'compile 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
导入封装好的retrofit

public class RetrofitUnitl {    private Retrofit mRetrofit;    private String baseUrl;    OkHttpClient client;    private static RetrofitUnitl mRetrofitManager;    private RetrofitUnitl(String baseUrl,OkHttpClient client){        this.baseUrl=baseUrl;        this.client=client;        initRetrofit();    }    public static synchronized RetrofitUnitl getInstance(String baseUrl, OkHttpClient client){        if (mRetrofitManager == null){            mRetrofitManager = new RetrofitUnitl(baseUrl,client);        }        return mRetrofitManager;    }    private void initRetrofit() {        mRetrofit = new Retrofit.Builder()                .baseUrl(baseUrl)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .client(client)                .build();    }    public <T> T setCreate(Class<T> reqServer) {        return mRetrofit.create(reqServer);    }}
然后是View层

public interface PracticeView {      void  Succes(PracticrBean practicrBean);      void  Datach(Exception e);}
这是请求方式

public interface PracticeRequest {    //https://www.zhaoapi.cn/ad/getAd    @GET("ad/getAd")    Observable<PracticrBean> get();}
Modle层的接口

public interface PracticeModle {    void  Succes(PracticrBean practicrBean);    void  Datach(Exception e);}
Modle的实体类

public class PracticeModles {    //自己定义一个请求的方法    public  void getData(final PracticeModle practiceModle){        OkHttpClient ok = new OkHttpClient.Builder()                .build();        RetrofitUnitl.getInstance("https://www.zhaoapi.cn/",ok)                .setCreate(PracticeRequest.class)                .get()                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Subscriber<PracticrBean>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(PracticrBean practicrBean) {                        practiceModle.Succes(practicrBean);                    }                }) ;    }}
Presenter层

public class PracticePresenter {    WeakReference<PracticeView> weakReference;   // PracticeView practiceView;     PracticeModles practiceModles;    public PracticePresenter(PracticeView practiceView) {        datach(practiceView);        this.practiceModles = new PracticeModles();    }    //自己定义的方法    public void login(){        //  判断//        view.success();        //new LoginModelImpl.LoginModelCallBack() 用modle层的实体类莱调用实体类的接口 得到成功的方法        practiceModles.getData(new PracticeModle() {            @Override            public void Succes(PracticrBean practicrBean) {                weakReference.get().Succes(practicrBean);            }            @Override            public void Datach(Exception e) {                weakReference.get().Datach(e);            }        });    }    // 绑定 内存泄漏    public  void  datach(PracticeView view){        weakReference = new WeakReference(view);    }    //解绑    public  void  data(){        weakReference.clear();    }}
App图片框架的初始化

public class MyAp  extends Application{    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);    }}
适配器
public class SuApdata extends RecyclerView.Adapter<SuApdata.ViewHolder> {    Context context;    PracticrBean practicrBean;    public SuApdata(Context context, PracticrBean practicrBean) {        this.context = context;        this.practicrBean = practicrBean;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = View.inflate(context, R.layout.apdata_layout, null);        return new ViewHolder(view);    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        holder.tv.setText(practicrBean.getData().get(position).getTitle());        Uri uri = Uri.parse(practicrBean.getData().get(position).getIcon());        DraweeController controller = Fresco.newDraweeControllerBuilder()                .setUri(uri)                .setAutoPlayAnimations(true)                .build();        holder.sd.setController(controller);    }    @Override    public int getItemCount() {        return practicrBean.getData().size();    }    public class ViewHolder extends RecyclerView.ViewHolder {        @BindView(R.id.sd)        SimpleDraweeView sd;        @BindView(R.id.tv)        TextView tv;        public ViewHolder(View itemView) {            super(itemView);            ButterKnife.bind(this, itemView);        }    }}
主Actiivity
public class MainActivity extends AppCompatActivity implements PracticeView {    PracticePresenter presenter;    @BindView(R.id.rv)    RecyclerView rv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        presenter = new PracticePresenter(this);        presenter.login();    }    @Override    public void Succes(PracticrBean practicrBean) {        //线性格式  布局管理器        LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        rv.setLayoutManager(manager);        //适配器        SuApdata adapter = new SuApdata(MainActivity.this, practicrBean);        rv.setAdapter(adapter);  //绑定    }    @Override    public void Datach(Exception e) {    }    //内存泄漏    @Override    public void onDestroy() {        super.onDestroy();        //解绑        presenter.data();    }}

主布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.dailyexercise.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/rv"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></LinearLayout>

适配器布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="wrap_content"> <com.facebook.drawee.view.SimpleDraweeView     android:id="@+id/sd"     android:layout_width="500dp"     android:layout_height="100dp" />    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>

原创粉丝点击