mvp抽基类+图片框架使用+banner(只是参考如何写)

1.导入依赖

//配置retrofit2.0
    implementation 'com.squareup.retrofit2:retrofit:+'
    implementation 'com.squareup.retrofit2:converter-gson:+'
//配置支持Rxjava2
    implementation 'com.squareup.retrofit2:adapter-rxjava2:+'
    implementation 'io.reactivex.rxjava2:rxjava:+'
    implementation 'io.reactivex.rxjava2:rxandroid:+'
    //图片加载框
    implementation 'com.facebook.fresco:fresco:1.5.0'
    implementation 'com.android.support:recyclerview-v7:27+'2.
2.添加网络权限

3.网络请求框架

package com.example.thinkpad.wsjmonitwo.utils;

import com.example.thinkpad.wsjmonitwo.constant.ConstantApi;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitManager {
    private static String BASE_URL = ConstantApi.BASE_URL;
    private Retrofit mRetrofit;
    private static class SingleHolder {
        private static final RetrofitManager _INSTANT = new RetrofitManager(BASE_URL);
    }
    public static RetrofitManager getDefault() {
        return SingleHolder._INSTANT;
    }
    private RetrofitManager(String baseUrl) {
        mRetrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(buildOkhttpClinet())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
    }
    private OkHttpClient buildOkhttpClinet() {
        return new OkHttpClient.Builder()
                .readTimeout(5, TimeUnit.SECONDS)
                .build();
    }

    public <T> T create(Class<T> Clazz) {
        return mRetrofit.create(Clazz);
    }
}

4.抽基类

package com.example.thinkpad.wsjmonitwo.base;

import io.reactivex.disposables.CompositeDisposable;

public  abstract  class BasePresenter <V extends IView>{
    protected CompositeDisposable compositeDisposable= new CompositeDisposable();
    protected  V view;
    public   BasePresenter(V view){
        this.view=view;
        initModel();
    }

    protected abstract void initModel();
    void onDestroy(){
        view= null;
        compositeDisposable.clear();
    }
}
package com.example.thinkpad.wsjmonitwo.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

public abstract class BeanActivity <P extends BasePresenter> extends AppCompatActivity{
    protected  P presenter;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
     setContentView(provideLayoutId());
        //获取id
        initview();
        presenter=providePresenter();
        //请求数据
        initData();
        //点击事件
        initListener();
    }
   protected  abstract  P providePresenter();
    protected  abstract  int provideLayoutId();
    protected abstract void initListener();

    protected abstract void initData();

    protected abstract void initview();

    @Override
    protected void onDestroy() {
       presenter.onDestroy();
        super.onDestroy();
    }
}
package com.example.thinkpad.wsjmonitwo.base;

public interface IView {
}

5.配置

package com.example.thinkpad.wsjmonitwo.constant;

public class ConstantApi {
    public static final String BASE_URL = "http://apis.juhe.cn/";
   // public static final String LOGING = "query";
//    public static final String REGISTER = "";
}

6.model接口

package com.example.thinkpad.wsjmonitwo.model;

import com.example.thinkpad.wsjmonitwo.bean.CaipuBean;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface IModel {
    @GET("cook/query")
    Observable<CaipuBean> login(@Query("key") String key, @Query("menu") String menu);

}

7.model类

package com.example.thinkpad.wsjmonitwo.model;

import com.example.thinkpad.wsjmonitwo.bean.CaipuBean;
import com.example.thinkpad.wsjmonitwo.utils.RetrofitManager;

import io.reactivex.Observable;

public class LoginModel {
    public Observable<CaipuBean> login(final String key, String menu) {
        return RetrofitManager.getDefault().create(IModel.class).login(key,menu);
    }
}

8.p层接口

package com.example.thinkpad.wsjmonitwo.presenter;
import com.example.thinkpad.wsjmonitwo.base.BasePresenter;
import com.example.thinkpad.wsjmonitwo.bean.CaipuBean;
import com.example.thinkpad.wsjmonitwo.model.LoginModel;
import com.example.thinkpad.wsjmonitwo.view.ILoginView;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

public class LoginPresenter extends BasePresenter<ILoginView> {

    private LoginModel loginModel;

    public LoginPresenter(ILoginView view) {
        super(view);
    }

    @Override
    protected void initModel() {
        loginModel = new LoginModel();

    }
    public  void  login(String key,String menu){
         loginModel.login(key,menu)
                 .subscribeOn(Schedulers.io())
                 .observeOn(AndroidSchedulers.mainThread())
                 .subscribe(new Observer<CaipuBean>() {
                     @Override
                     public void onSubscribe(Disposable d) {
                         compositeDisposable.add(d);
                     }
                      //成功
                     @Override
                     public void onNext(CaipuBean caipuBean) {
                         if(view!=null){
                             view.onLoginSuccess(caipuBean);
                         }
                     }
                    //失败
                     @Override
                     public void onError(Throwable e) {
                          if (view!=null){
                              view.onLoginFaild(e.toString());
                          }
                     }

                     @Override
                     public void onComplete() {

                     }
                 });
    }
}

9.

Fresco必须要初始化的类    必须要在清单文件中实现

package com.example.thinkpad.wsjmonitwo.app;

import android.app.Application;

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

public class Myapp extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值