MVP的再次封装(banner轮播图)

首先导入依赖
implementation ‘com.squareup.retrofit2:retrofit:2.5.0’
implementation ‘com.squareup.okhttp3:okhttp:3.12.1’
implementation ‘com.jakewharton:butterknife:8.8.1’
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’
implementation ‘com.squareup.retrofit2:converter-gson:2.5.0’
implementation ‘io.reactivex.rxjava2:rxjava:2.2.4’
implementation ‘io.reactivex.rxjava2:rxandroid:2.1.0’
implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.5.0’
implementation ‘com.squareup.okhttp3:logging-interceptor:3.12.1’
implementation ‘com.youth.banner:banner:1.4.9’
implementation ‘com.facebook.fresco:fresco:0.14.1’
implementation ‘com.facebook.fresco:fresco:1.11.0’
添加权限

布局
main_activity

<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width=“match_parent”
android:layout_height=“200dp”></com.youth.banner.Banner>
banner布局
banner_item

<?xml version="1.0" encoding="utf-8"?>

<com.facebook.drawee.view.SimpleDraweeView xmlns:android=“http://schemas.android.com/apk/res/android
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”
android:layout_marginLeft=“10dp”
android:layout_marginRight=“10dp”
android:padding=“10dp”>

</com.facebook.drawee.view.SimpleDraweeView>
代码
MainActivity

package com.bawei.bannerdemo;

import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

import com.bawei.bannerdemo.bean.Result;
import com.bawei.bannerdemo.core.DataCall;
import com.bawei.bannerdemo.presenter.BannerPresenter;
import com.facebook.drawee.view.SimpleDraweeView;
import com.youth.banner.Banner;
import com.youth.banner.loader.ImageLoader;
import com.youth.banner.loader.ImageLoaderInterface;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

@BindView(R.id.banner)
Banner banner;
private BannerPresenter bannerPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    //创建对象
    bannerPresenter = new BannerPresenter(new BannerCall());
    bannerPresenter.request();
}

private class BannerCall implements DataCall<Result<List<GoodsBanner>>> {
    @Override
    public void success(Result<List<GoodsBanner>> result) {
        List<String> list = new ArrayList<>();
        List<GoodsBanner> result1 = result.getResult();
        for (int i = 0; i < result1.size(); i++) {
            list.add(result1.get(i).getImageUrl());
        }
        banner.setImages(list);
        banner.setImageLoader(new MyBanner());
        banner.start();
    }

    @Override
    public void fail(Result result) {

    }
}

private class MyBanner extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Uri parse = Uri.parse((String) path);
        imageView.setImageURI(parse);
    }

    @Override
    public ImageView createImageView(Context context) {
        SimpleDraweeView simpleDraweeView = (SimpleDraweeView) View.inflate(MainActivity.this, R.layout.banner_item, null);
        return simpleDraweeView;
    }
}

}

BannerPresenter
package com.bawei.bannerdemo.presenter;

import com.bawei.bannerdemo.core.BasePresenter;
import com.bawei.bannerdemo.core.DataCall;
import com.bawei.bannerdemo.core.IRequest;
import com.bawei.bannerdemo.http.NetWork;

import io.reactivex.Observable;

public class BannerPresenter extends BasePresenter {
public BannerPresenter(DataCall dataCall) {
super(dataCall);
}

@Override
public Observable observable(Object... args) {
    IRequest iRequest = NetWork.instance().create(IRequest.class);
    return iRequest.banner();
}

}

Http包
NetWork
package com.bawei.bannerdemo.http;

import java.util.concurrent.TimeUnit;

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

public class NetWork {
private static NetWork instance;
private Retrofit retrofit;
public static NetWork instance(){
if (instance ==null){
instance = new NetWork();
}
return instance;
}
private NetWork(){
init();
}

private void init() {
    //设置拦截器
    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    //网络请求
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(httpLoggingInterceptor)
            .connectTimeout(60,TimeUnit.SECONDS)
            .readTimeout(10,TimeUnit.SECONDS)
            .writeTimeout(10,TimeUnit.SECONDS)
            .build();
    retrofit = new Retrofit.Builder()
            .client(okHttpClient)
            .baseUrl("http://172.17.8.100/")
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}
public <T> T create(final Class<T> service){
    return retrofit.create(service);
}

}

BasePresenter

package com.bawei.bannerdemo.core;

import com.bawei.bannerdemo.bean.Result;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

public abstract class BasePresenter {
DataCall dataCall;
public BasePresenter(DataCall dataCall){
this.dataCall = dataCall;
}

public abstract Observable observable(Object... args);

public void request(Object...args){
    observable().subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Result>() {
                @Override
                public void accept(Result result) throws Exception {
                    dataCall.success(result);
                }
            }, new Consumer<Result>() {
                @Override
                public void accept(Result result) throws Exception {
                    dataCall.fail(result);
                }
            });
}

}
MyApp
package com.bawei.bannerdemo.app;

import android.app.Application;
import android.content.Context;

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

public class MyApp extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
context = this;
}
public static Context getContext(){
return context;
}
}
IRequest
/**
* 轮播图
* @return
*/
@GET(“small/commodity/v1/bannerShow”)
Observable<Result<List>> banner();

DataCall
public interface DataCall {
void success (T result);
void fail(Result result);
}
Bean类
Result
package com.bawei.bannerdemo.bean;

public class Result {
// “result”:[]
// “message”: “查询成功”,
// “status”: “0000”
private T result;
private String message;
private String status;

public T getResult() {
    return result;
}

public void setResult(T result) {
    this.result = result;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

}
GoodsBanner
package com.bawei.bannerdemo.bean;

public class GoodsBanner {
// “imageUrl”: “http://172.17.8.100/images/small/banner/cj.png”,
// “jumpUrl”: “http://172.17.8.100/htm/lottery/index.html”,
// “rank”: 5,
// “title”: “抽奖”
private String imageUrl;
private String jumpUrl;
private int rank;
private String title;

public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

public String getJumpUrl() {
    return jumpUrl;
}

public void setJumpUrl(String jumpUrl) {
    this.jumpUrl = jumpUrl;
}

public int getRank() {
    return rank;
}

public void setRank(int rank) {
    this.rank = rank;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值