1. 程式人生 > >Mvp Retrofit Okhttp Rxjava

Mvp Retrofit Okhttp Rxjava

extend fin 添加 okhttp3 bind item .get 關聯 osi

MainActivity 

package com.bwie.shexinhai;

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

import com.bwie.shexinhai.Adapter.MyAdapter;
import com.bwie.shexinhai.Presenter.ShowPresenter;
import com.bwie.shexinhai.Presenter.ShowPresenterImpl;
import com.bwie.shexinhai.View.ShowView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.youth.banner.Banner;

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

public class MainActivity extends AppCompatActivity implements ShowView {
    private Banner banner;
    private RecyclerView recycleview;
    private List<Bean.DataBean.DefaultGoodsListBean>list;
    private LinearLayoutManager manager;
    private List<String> mListImage;
    private MyAdapter adapter;
    private ShowPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        recycleview = (RecyclerView) findViewById(R.id.myrecycle);
        banner= (Banner) findViewById(R.id.mybanner);

        manager = new LinearLayoutManager(this);
        recycleview.setLayoutManager(manager);
        //p關聯v
        presenter = new ShowPresenterImpl(this);
        //p關聯m 做網絡請求
        presenter.relevance();

        //加載圖片的方法
        banner.setImageLoader(new GlideImageLoader());
        mListImage= new ArrayList<>();
        //向圖片集合中添加網網址

        mListImage.add("https://image.yunifang.com/yunifang/images/goods/2076/goods_img/170930212555714134276722977.jpg");
        mListImage.add("https://image.yunifang.com/yunifang/images/goods/temp/171011192212214258195254179.jpg");
        mListImage.add("https://image.yunifang.com/yunifang/images/goods/temp/17101119283583452898243380.jpg");
        mListImage.add("https://image.yunifang.com/yunifang/images/goods/2091/goods_img/170905172822119555059792173.jpg");

        //設置Banner圖片集合
        banner.setImages(mListImage);
        //切換的時間
        banner.setDelayTime(2000);
        //啟動banner
        banner.start();

                 }
    @Override
    public void showData(Bean news) {
        list =  news.getData().getDefaultGoodsList();
        adapter = new MyAdapter(MainActivity.this,list);
        recycleview.setAdapter(adapter);
    }
}

OnFinishListener

public interface OnFinishListener {
    void success(Bean bean);
}

Banner


package com.bwie.shexinhai;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public class GlideImageLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        //使用glide加載圖片
        Glide.with(context).load(path).into(imageView);
    }
}

View




public interface ShowView {
    void showData(Bean news);
}

RetrofitUtils 


package com.bwie.shexinhai.utils;

import android.util.Log;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class RetrofitUtils {
    private static RetrofitUtils retrofitUtils;
    private RetrofitUtils(){

    }
    public static RetrofitUtils getInstance(){
        if(retrofitUtils==null){
            synchronized (RetrofitUtils.class){
                if(retrofitUtils==null){
                    retrofitUtils=new RetrofitUtils();
                }
            }
        }
        return retrofitUtils;
    }

    private static Retrofit retrofit;
    public static synchronized Retrofit getRetrofit(String url){
        HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Log.i("xxx",message);
            }
        });
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient=new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .connectTimeout(500, TimeUnit.SECONDS)
                .readTimeout(500,TimeUnit.SECONDS)
                .retryOnConnectionFailure(false)
                .build();
        if(retrofit==null){
            retrofit=new Retrofit.Builder().baseUrl(url)
                    .client(okHttpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .build();
        }
        return retrofit;
    }
    public <T>T getApiService(String url,Class<T> cl){
        Retrofit retrofit = getRetrofit(url);//得到retrofit

        return retrofit.create(cl);//返回的就是網絡接口對象

    }


}

ShowPresenterImpl 


package com.bwie.shexinhai.Presenter;

import com.bwie.shexinhai.Bean;
import com.bwie.shexinhai.Model.ShowModel;
import com.bwie.shexinhai.Model.ShowModelImpl;
import com.bwie.shexinhai.OnFinishListener;
import com.bwie.shexinhai.View.ShowView;

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public class ShowPresenterImpl implements ShowPresenter,OnFinishListener {
    ShowView showView;
    private final ShowModel showModel;
    //初始化
    public ShowPresenterImpl(ShowView showView){
        this.showView  = showView;
        //多態
        showModel = new ShowModelImpl();


    }

    @Override
    public void relevance() {
        //p跟m關聯
        showModel.getData(this);
    }

    @Override
    public void success(Bean news) {
        showView.showData(news);
    }
}

ShowPresenter 


package com.bwie.shexinhai.Presenter;

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public interface ShowPresenter {
    void relevance();
}

Model


package com.bwie.shexinhai.Model;


import com.bwie.shexinhai.ApiCls.Api;
import com.bwie.shexinhai.ApiCls.ApiService;
import com.bwie.shexinhai.Bean;
import com.bwie.shexinhai.OnFinishListener;
import com.bwie.shexinhai.utils.RetrofitUtils;

import rx.Observable;
import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;



/**
 * Created by 佘鑫海 on 2017/12/4.
 */
public class ShowModelImpl implements ShowModel {
    @Override
    public void getData(final OnFinishListener listener) {
        ApiService apiService = RetrofitUtils.getInstance().getApiService(Api.api_data, ApiService.class);
        Observable<Bean> observable = apiService.getData();
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Bean>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {

                    }
                    @Override
                    public void onNext(Bean bean) {
                        listener.success(bean);
                    }
                });
    }
    }

Model


package com.bwie.shexinhai.Model;

import com.bwie.shexinhai.OnFinishListener;

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public interface ShowModel {
    void getData(OnFinishListener listener);
}

ApiService 


package com.bwie.shexinhai.ApiCls;


import com.bwie.shexinhai.Bean;

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

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public interface ApiService {
    @GET("umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage")
    Observable<Bean> getData();
}

Api


package com.bwie.shexinhai.ApiCls;

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public class Api {
    public  static  final String api_data ="http://result.eolinker.com/";
}

Adapter


package com.bwie.shexinhai.Adapter;

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

import com.bumptech.glide.Glide;
import com.bwie.shexinhai.Bean;
import com.bwie.shexinhai.R;
import com.facebook.drawee.view.SimpleDraweeView;

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

/**
 * Created by 佘鑫海 on 2017/12/4.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private Context context;
    private List<Bean.DataBean.DefaultGoodsListBean> list;

    public MyAdapter(Context context, List<Bean.DataBean.DefaultGoodsListBean> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Glide.with(context).load(list.get(position).getGoods_img()).into(holder.imgLogo);
        holder.txtName.setText(list.get(position).getGoods_name());
        holder.txtName2.setText(list.get(position).getGoods_name());
        holder.imgLogo2.setImageURI(list.get(position).getGoods_img());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    public void setData(Bean bean){

        if(this.list == null){
            this.list = new ArrayList<>();
        }
        this.list.addAll(bean.getData().getDefaultGoodsList());
        notifyDataSetChanged();

    }

    class ViewHolder extends RecyclerView.ViewHolder{
        private SimpleDraweeView imgLogo;
        private TextView txtName;
        private SimpleDraweeView imgLogo2;
        private TextView txtName2;

        public ViewHolder(View itemView) {
            super(itemView);

            imgLogo =  itemView.findViewById(R.id.myimage1);
            imgLogo2 =  itemView.findViewById(R.id.myimage2);
            txtName =  itemView.findViewById(R.id.mytext2);
            txtName2 =  itemView.findViewById(R.id.mytext);
        }
    }
}

  compile ‘com.android.support:appcompat-v7:26.+‘
    compile ‘com.youth.banner:banner:1.4.9‘
    compile ‘com.github.bumptech.glide:glide:4.0.0‘
    compile ‘com.android.support:recyclerview-v7:21.0.+‘
    compile ‘com.facebook.fresco:fresco:0.14.1‘
    compile ‘com.squareup.retrofit2:retrofit:2.3.0‘
    compile ‘com.squareup.retrofit2:adapter-rxjava:2.0.1‘
    compile ‘io.reactivex:rxandroid:1.1.0‘
    compile ‘com.squareup.okhttp3:okhttp:3.0.0‘
    compile ‘com.squareup.okio:okio:1.5.0‘
    compile ‘com.squareup.okhttp3:logging-interceptor:3.4.1‘
    compile ‘com.squareup.retrofit2:converter-gson:2.3.0‘
    compile ‘com.android.support.constraint:constraint-layout:1.0.2‘
    testCompile ‘junit:junit:4.12‘

Mvp Retrofit Okhttp Rxjava