使用的依赖和权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
implementation rootProject.ext.dependencies["appcompat-v7"] implementation rootProject.ext.dependencies["constraint-layout"] implementation rootProject.ext.dependencies["retrofit2"] implementation rootProject.ext.dependencies["converter-gson"] implementation rootProject.ext.dependencies["rxjava2"] implementation rootProject.ext.dependencies["rxjava2:rxandroid"] implementation rootProject.ext.dependencies["dagger"] annotationProcessor rootProject.ext.dependencies["dagger-compiler"] implementation rootProject.ext.dependencies["adapter-rxjava"] implementation 'com.facebook.fresco:fresco:0.12.0' // 支持 GIF 动图,需要添加 implementation 'com.facebook.fresco:animated-gif:0.12.0' implementation 'com.android.support:support-v4:27.1.1' implementation 'com.sunfusheng:marqueeview:1.3.3' implementation 'com.jcodecraeer:xrecyclerview:1.3.2' implementation 'com.youth.banner:banner:1.4.10' implementation 'com.android.support:design:27.1.1'
build.gradle
apply from: "config.gradle"
新创建的config.gradle
ext { android = [ compileSdkVersion: 27, applicationId : "com.example.ruiyonghui.combwieruiyonghui0512", minSdkVersion : 15, targetSdkVersion : 27, versionCode : 1, versionName : "1.0" ] dependencies = [ "appcompat-v7" : "com.android.support:appcompat-v7:27.1.1", "constraint-layout": "com.android.support.constraint:constraint-layout:1.1.0", "retrofit2" : "com.squareup.retrofit2:retrofit:2.4.0", "converter-gson" : "com.squareup.retrofit2:converter-gson:2.4.0", "adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava2:2.4.0", "rxjava2" : "io.reactivex.rxjava2:rxjava:2.1.13", "rxjava2:rxandroid": "io.reactivex.rxjava2:rxandroid:2.0.2", "dagger" : "com.google.dagger:dagger:2.8", "dagger-compiler" : "com.google.dagger:dagger-compiler:2.7" ] }
activity_my_home
<?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" tools:context=".MyHomeActivity"> <FrameLayout android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
fragment_home
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#d6d6d6" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/ivZxing" android:layout_width="30dp" android:layout_height="30dp" android:layout_marginLeft="15dp" android:background="@drawable/a_s"/> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_weight="1" android:background="@drawable/shape_search"> </LinearLayout> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_marginRight="15dp" android:background="@drawable/my_msg_bai"/> </LinearLayout> <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="200dp"/> <android.support.v7.widget.RecyclerView android:id="@+id/rvClass" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> <RelativeLayout android:layout_width="match_parent" android:layout_height="30dp" android:layout_margin="15dp" android:background="@drawable/shape_search"> <TextView android:id="@+id/tvJD" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:text="京东快报"/> <LinearLayout android:id="@+id/llMore" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:orientation="horizontal"> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#000000"></View> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:text="更多"/> </LinearLayout> <com.sunfusheng.marqueeview.MarqueeView android:id="@+id/marqueeView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="15dp" android:layout_toLeftOf="@id/llMore" android:layout_toRightOf="@id/tvJD" app:mvAnimDuration="1000" app:mvDirection="bottom_to_top" app:mvInterval="3000" app:mvSingleLine="true" app:mvTextColor="#000000" app:mvTextSize="14sp"/> </RelativeLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rvSecKill" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> <TextView android:layout_width="match_parent" android:layout_height="40dp" android:background="#33000000" android:gravity="center" android:text="为您推荐"/> <android.support.v7.widget.RecyclerView android:id="@+id/rvRecommend" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout> </ScrollView>
rvclass_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center" android:orientation="vertical"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
rvrecommend_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" android:padding="10dp"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="200dp" android:layout_height="200dp"/> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
rvseckill_item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:padding="10dp" android:layout_height="wrap_content"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/iv" android:layout_width="90dp" android:layout_height="90dp"/> </LinearLayout>
drawable文件夹下shape_search
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="20dp"></corners> <solid android:color="#ffffff"></solid> </shape>
MyHomeActivity
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.FrameLayout; public class MyHomeActivity extends FragmentActivity { private FrameLayout mFl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_home); initView(); FragmentManager fragmentManager = getSupportFragmentManager(); HomePageFragment homePageFragment = new HomePageFragment(); fragmentManager.beginTransaction() .replace(R.id.fl, homePageFragment) .commit(); } private void initView() { mFl = (FrameLayout) findViewById(R.id.fl); } }
HomePageFragment
import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import com.bwie.test.adapter.RvClassAdapter; import com.bwie.test.adapter.RvRecommendAdapter; import com.bwie.test.adapter.RvSecKillAdapter; import com.bwie.test.bean.AdBean; import com.bwie.test.bean.CatagoryBean; import com.bwie.test.component.DaggerHttpComponent; import com.bwie.test.module.HttpModule; import com.bwie.test.myhomedemo.base.BaseFragment; import com.bwie.test.myhomedemo.contract.HomPageContract; import com.bwie.test.myhomedemo.presenter.HomePagePresenter; import com.bwie.test.myhomedemo.R; import com.bwie.test.utils.GlideImageLoader; import com.sunfusheng.marqueeview.MarqueeView; import com.youth.banner.Banner; import java.util.ArrayList; import java.util.List; public class HomePageFragment extends BaseFragment<HomePagePresenter> implements HomPageContract.View { private Banner banner; private RecyclerView rvClass; private MarqueeView marqueeView; private RecyclerView rvSecKill; private RecyclerView rvRecommend; private ImageView ivZxing; @Override public int getContentLayout() { return R.layout.fragment_home; } @Override public void inject() { DaggerHttpComponent.builder() .httpModule(new HttpModule()) .build() .inject(this); } @Override public void initView(View view) { marqueeView = view.findViewById(R.id.marqueeView); List<String> info = new ArrayList<>(); info.add("不管在贴吧的哪个角落,海吧是你坚强的后盾"); info.add("只要有树叶飞舞的地方,火就会燃烧。"); info.add("我若要有,天不可无。我若要无,天不可有。"); info.add("我命如妖 欲 封 天。"); info.add("奇迹不是乞求来的,而是靠我们努力创造的"); info.add("迪妮莎 :被紧紧抱住的人,原来是我。"); marqueeView.startWithList(info); banner = (Banner) view.findViewById(R.id.banner); rvClass = view.findViewById(R.id.rvClass); //设置布局管理器 GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2, RecyclerView.HORIZONTAL, false); rvClass.setLayoutManager(gridLayoutManager); rvSecKill = view.findViewById(R.id.rvSecKill); //设置布局管理器 GridLayoutManager gridLayoutManager1 = new GridLayoutManager(getContext(), 1, RecyclerView.HORIZONTAL, false); rvSecKill.setLayoutManager(gridLayoutManager1); //设置布局管理器 rvRecommend = view.findViewById(R.id.rvRecommend); GridLayoutManager gridLayoutManager2 = new GridLayoutManager(getContext(), 2, RecyclerView.VERTICAL, false); rvRecommend.setLayoutManager(gridLayoutManager2); //设置图片加载器 banner.setImageLoader(new GlideImageLoader()); //二维码 ivZxing = view.findViewById(R.id.ivZxing); //请求数据 initData(); } /** * 请求数据 */ private void initData() { mPresenter.getAd(); mPresenter.getCatagory(); } @Override public void getAdSuccess(AdBean adBean) { List<AdBean.DataBean> data = adBean.getData(); List<String> images = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { images.add(data.get(i).getIcon()); } //设置图片集合 banner.setImages(images); //banner设置方法全部调用完毕时最后调用 banner.start(); RvSecKillAdapter rvSecKillAdapter = new RvSecKillAdapter(getActivity(), adBean.getMiaosha() .getList()); rvSecKill.setAdapter(rvSecKillAdapter); RvRecommendAdapter rvRecommendAdapter = new RvRecommendAdapter(getActivity(), adBean.getTuijian() .getList()); rvRecommend.setAdapter(rvRecommendAdapter); } @Override public void onDestroy() { super.onDestroy(); //结束轮播 banner.stopAutoPlay(); } @Override public void getCatagorySuccess(CatagoryBean catagoryBean) { List<CatagoryBean.DataBean> data = catagoryBean.getData(); RvClassAdapter adapter = new RvClassAdapter(getActivity(), data); rvClass.setAdapter(adapter); } }
app文件夹下MyApp
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); } }
contract文件夹下HomPageContract
import com.bwie.test.bean.AdBean; import com.bwie.test.bean.CatagoryBean; import com.bwie.test.myhomedemo.base.BaseContract; public interface HomPageContract { interface View extends BaseContract.BaseView { void getAdSuccess(AdBean adBean); void getCatagorySuccess(CatagoryBean catagoryBean); } interface Presenter extends BaseContract.BasePresenter<View> { void getAd(); void getCatagory(); } }
inter文件夹下IBase
import android.view.View; public interface IBase { int getContentLayout(); void inject(); void initView(View view); }
OnItemClickListener
public interface OnItemClickListener { void onItemClick(int position); void onLongItemClick(int position); }
presenter文件夹下HomePagePresenter
import com.bwie.test.bean.AdBean; import com.bwie.test.bean.CatagoryBean; import com.bwie.test.myhomedemo.base.BasePresenter; import com.bwie.test.myhomedemo.contract.HomPageContract; import com.bwie.test.utils.AdApi; import com.bwie.test.utils.CatagoryApi; import javax.inject.Inject; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class HomePagePresenter extends BasePresenter<HomPageContract.View> implements HomPageContract.Presenter { private AdApi adApi; private CatagoryApi catagoryApi; @Inject public HomePagePresenter(AdApi adApi, CatagoryApi catagoryApi) { this.adApi = adApi; this.catagoryApi = catagoryApi; } @Override public void getAd() { adApi.getAd() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<AdBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(AdBean adBean) { mView.getAdSuccess(adBean); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override public void getCatagory() { catagoryApi.getCatagory() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Observer<CatagoryBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(CatagoryBean catagoryBean) { mView.getCatagorySuccess(catagoryBean); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } }
adapter文件夹下RvClassAdapter
import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.bwie.test.bean.CatagoryBean; import com.bwie.test.myhomedemo.R; import com.bwie.test.myhomedemo.inter.OnItemClickListener; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class RvClassAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<CatagoryBean.DataBean> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvClassAdapter(Context context, List<CatagoryBean.DataBean> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvclass_item, parent, false); ClassViewHoler classViewHoler = new ClassViewHoler(view); return classViewHoler; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { //显示数据 ClassViewHoler classViewHoler = (ClassViewHoler) holder; CatagoryBean.DataBean dataBean = list.get(position); classViewHoler.iv.setImageURI(dataBean.getIcon()); classViewHoler.tv.setText(dataBean.getName()); //给条目设置点击事件 classViewHoler.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) { onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return list.size(); } class ClassViewHoler extends RecyclerView.ViewHolder { private final SimpleDraweeView iv; private final TextView tv; private final LinearLayout ll; public ClassViewHoler(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); tv = itemView.findViewById(R.id.tv); ll = itemView.findViewById(R.id.ll); } } }
RvRecommendAdapter
import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.bwie.test.bean.AdBean; import com.bwie.test.myhomedemo.R; import com.bwie.test.myhomedemo.inter.OnItemClickListener; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class RvRecommendAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<AdBean.TuijianBean.ListBean> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvRecommendAdapter(Context context, List<AdBean.TuijianBean.ListBean> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvrecommend_item, parent, false); RecommendViewHolder recommendViewHolder = new RecommendViewHolder(view); return recommendViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { RecommendViewHolder recommendViewHolder = (RecommendViewHolder) holder; AdBean.TuijianBean.ListBean listBean = list.get(position); String images = listBean.getImages(); String[] split = images.split("\\|"); String url = split.length == 0 ? images : split[0]; recommendViewHolder.iv.setImageURI(url); recommendViewHolder.tv.setText(listBean.getTitle()); } @Override public int getItemCount() { return list.size(); } class RecommendViewHolder extends RecyclerView.ViewHolder { private final SimpleDraweeView iv; private final TextView tv; public RecommendViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); tv = itemView.findViewById(R.id.tv); } } }
RvSecKillAdapter
import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bwie.test.bean.AdBean; import com.bwie.test.myhomedemo.R; import com.bwie.test.myhomedemo.inter.OnItemClickListener; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class RvSecKillAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<AdBean.MiaoshaBean.ListBeanX> list; private LayoutInflater inflater; private OnItemClickListener onItemClickListener; public RvSecKillAdapter(Context context, List<AdBean.MiaoshaBean.ListBeanX> list) { this.context = context; this.list = list; inflater = LayoutInflater.from(context); } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.rvseckill_item, parent, false); SecKillViewHolder secKillViewHolder = new SecKillViewHolder(view); return secKillViewHolder; } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { SecKillViewHolder secKillViewHolder = (SecKillViewHolder) holder; AdBean.MiaoshaBean.ListBeanX listBeanX = list.get(position); String url = listBeanX.getImages().split("\\|")[0]; secKillViewHolder.iv.setImageURI(url); secKillViewHolder.iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null){ onItemClickListener.onItemClick(position); } } }); } @Override public int getItemCount() { return list.size(); } class SecKillViewHolder extends RecyclerView.ViewHolder{ private final SimpleDraweeView iv; public SecKillViewHolder(View itemView) { super(itemView); iv = itemView.findViewById(R.id.iv); } } }
base文件夹下BaseActivity
import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.bwie.test.myhomedemo.inter.IBase; import javax.inject.Inject; public abstract class BaseActivity<T extends BaseContract.BasePresenter> extends AppCompatActivity implements IBase,BaseContract.BaseView { @Inject protected T mPresenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentLayout()); inject(); //绑定 mPresenter.attchView(this); } @Override public void initView(View view) { } @Override protected void onDestroy() { super.onDestroy(); //解绑 mPresenter.detachView(); } @Override public void showLoading() { } @Override public void dismissLoading() { } }
BaseContract
public interface BaseContract { //抽取所有Presenter共性,比如绑定,解绑 interface BasePresenter<T extends BaseView> { void attchView(T view); void detachView(); } //抽取所有View的共性,比如显示进度条和关闭进度 interface BaseView { void showLoading(); void dismissLoading(); } }
BaseFragment
import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bwie.test.myhomedemo.inter.IBase; import javax.inject.Inject; public abstract class BaseFragment<T extends BaseContract.BasePresenter> extends Fragment implements IBase, BaseContract.BaseView { @Inject protected T mPresenter; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); inject(); mPresenter.attchView(this); } @Override public void onDestroy() { super.onDestroy(); mPresenter.detachView(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(getContentLayout(), null); initView(view); return view; } @Override public void showLoading() { } @Override public void dismissLoading() { } }
BasePresenter
public class BasePresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> { protected T mView; @Override public void attchView(T view) { this.mView = view; } @Override public void detachView() { if (mView != null) { mView = null; } } }
component文件夹下HttpComponent
import com.bwie.test.module.HttpModule; import com.bwie.test.myhomedemo.HomePageFragment; import dagger.Component; @Component(modules = HttpModule.class) public interface HttpComponent { //void inject(LoginActivity loginActivity); void inject(HomePageFragment homePageFragment); }
module文件夹下HttpModule
import com.bwie.test.utils.AdApi; import com.bwie.test.utils.AdApiService; import com.bwie.test.utils.Api; import com.bwie.test.utils.CatagoryApi; import com.bwie.test.utils.CatagoryApiService; import java.util.concurrent.TimeUnit; import dagger.Module; import dagger.Provides; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; @Module public class HttpModule { @Provides OkHttpClient.Builder provideOkHttpClientBuilder() { return new OkHttpClient.Builder() .writeTimeout(20, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .connectTimeout(10, TimeUnit.SECONDS); } @Provides AdApi provideAdApi(OkHttpClient.Builder builder) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(Api.BASEURL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(builder.build()) .build(); AdApiService adApiService = retrofit.create(AdApiService.class); return AdApi.getAdApi(adApiService); } @Provides CatagoryApi provideCatagoryApi(OkHttpClient.Builder builder) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(Api.BASEURL) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .client(builder.build()) .build(); CatagoryApiService catagoryApiService = retrofit.create(CatagoryApiService.class); return CatagoryApi.getCatagoryApi(catagoryApiService); } }
utils文件夹下Api
public interface Api { String BASEURL = "https://www.zhaoapi.cn/"; }
AdApi
import com.bwie.test.bean.AdBean; import io.reactivex.Observable; public class AdApi { private static AdApi adApi; private AdApiService adApiService; private AdApi(AdApiService adApiService) { this.adApiService = adApiService; } public static AdApi getAdApi(AdApiService adApiService) { if (adApi == null) { adApi = new AdApi(adApiService); } return adApi; } public Observable<AdBean> getAd() { return adApiService.getAd(); } }
AdApiService
import com.bwie.test.bean.AdBean; import io.reactivex.Observable; import retrofit2.http.GET; public interface AdApiService { @GET("ad/getAd") Observable<AdBean> getAd(); }
CatagoryApi
import com.bwie.test.bean.CatagoryBean; import io.reactivex.Observable; public class CatagoryApi { private static CatagoryApi catagoryApi; private CatagoryApiService catagoryApiService; private CatagoryApi(CatagoryApiService catagoryApiService) { this.catagoryApiService = catagoryApiService; } public static CatagoryApi getCatagoryApi(CatagoryApiService catagoryApiService) { if (catagoryApi == null) { catagoryApi = new CatagoryApi(catagoryApiService); } return catagoryApi; } public Observable<CatagoryBean> getCatagory() { return catagoryApiService.getCatagory(); } }
CatagoryApiService
import com.bwie.test.bean.CatagoryBean; import io.reactivex.Observable; import retrofit2.http.GET; public interface CatagoryApiService { @GET("product/getCatagory") Observable<CatagoryBean> getCatagory(); }
GlideImageLoader
import android.content.Context; import android.net.Uri; import android.widget.ImageView; import com.facebook.drawee.view.SimpleDraweeView; import com.youth.banner.loader.ImageLoader; public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { Uri uri = Uri.parse((String) path); imageView.setImageURI(uri); } @Override public ImageView createImageView(Context context) { SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context); return simpleDraweeView; } }
bean文件夹下AdBean
import java.util.List; public class AdBean { private String msg; private String code; private TuijianBean tuijian; private MiaoshaBean miaosha; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public TuijianBean getTuijian() { return tuijian; } public void setTuijian(TuijianBean tuijian) { this.tuijian = tuijian; } public MiaoshaBean getMiaosha() { return miaosha; } public void setMiaosha(MiaoshaBean miaosha) { this.miaosha = miaosha; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class TuijianBean { private String name; private List<ListBean> list; public String getName() { return name; } public void setName(String name) { this.name = name; } public List<ListBean> getList() { return list; } public void setList(List<ListBean> list) { this.list = list; } public static class ListBean { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getItemtype() { return itemtype; } public void setItemtype(int itemtype) { this.itemtype = itemtype; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } } public static class MiaoshaBean { private String name; private int time; private List<ListBeanX> list; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } public List<ListBeanX> getList() { return list; } public void setList(List<ListBeanX> list) { this.list = list; } public static class ListBeanX { private double bargainPrice; private String createtime; private String detailUrl; private String images; private int itemtype; private int pid; private double price; private int pscid; private int salenum; private int sellerid; private String subhead; private String title; public double getBargainPrice() { return bargainPrice; } public void setBargainPrice(double bargainPrice) { this.bargainPrice = bargainPrice; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getDetailUrl() { return detailUrl; } public void setDetailUrl(String detailUrl) { this.detailUrl = detailUrl; } public String getImages() { return images; } public void setImages(String images) { this.images = images; } public int getItemtype() { return itemtype; } public void setItemtype(int itemtype) { this.itemtype = itemtype; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getPscid() { return pscid; } public void setPscid(int pscid) { this.pscid = pscid; } public int getSalenum() { return salenum; } public void setSalenum(int salenum) { this.salenum = salenum; } public int getSellerid() { return sellerid; } public void setSellerid(int sellerid) { this.sellerid = sellerid; } public String getSubhead() { return subhead; } public void setSubhead(String subhead) { this.subhead = subhead; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } } public static class DataBean { private int aid; private String createtime; private String icon; private Object productId; private String title; private int type; private String url; public int getAid() { return aid; } public void setAid(int aid) { this.aid = aid; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public Object getProductId() { return productId; } public void setProductId(Object productId) { this.productId = productId; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }
CatagoryBean
import java.util.List; public class CatagoryBean { private String msg; private String code; private List<DataBean> data; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public List<DataBean> getData() { return data; } public void setData(List<DataBean> data) { this.data = data; } public static class DataBean { private int cid; private String createtime; private String icon; private int ishome; private String name; public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this.createtime = createtime; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public int getIshome() { return ishome; } public void setIshome(int ishome) { this.ishome = ishome; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }