implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.android.support:design:27.+'
implementation 'com.facebook.fresco:fresco:0.12.0'
//其他依赖
// 在 API < 14 上的机器支持 WebP 时,需要添加
implementation 'com.facebook.fresco:animated-base-support:0.12.0'
// 支持 GIF 动图,需要添加
implementation 'com.facebook.fresco:animated-gif:0.12.0'
// 支持 WebP (静态图+动图),需要添加
implementation 'com.facebook.fresco:animated-webp:0.12.0'
implementation 'com.facebook.fresco:webpsupport:0.12.0'
// 仅支持 WebP 静态图,需要添加
//implementation 'com.facebook.fresco:webpsupport:0.12.0'
implementation 'com.android.support:support-v4:27.0.0'
拦截器
public class LogInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String method = request.method();
HttpUrl url = request.url();
Log.i("LogInterceptor",method+"...."+url);
Response proceed = chain.proceed(request);
return proceed;
}
}
网络工具类
public class RetrofitUtil {
private static RetrofitUtil retrofitUtil;
private Retrofit retrofit;
private OkHttpClient client;
private RetrofitUtil(){
client = new OkHttpClient.Builder()
.addInterceptor(new LogInterceptor())
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(5000,TimeUnit.MILLISECONDS)
.build();
}
public static RetrofitUtil getInstance(){
if(null == retrofitUtil){
synchronized (RetrofitUtil.class){
if(null == retrofitUtil){
return new RetrofitUtil();
}
}
}
return retrofitUtil;
}
public ApiService getapiService(String baseurl){
retrofit = new Retrofit.Builder()
.client(client)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseurl)
.build();
ApiService apiService = retrofit.create(ApiService.class);
return apiService;
}
}
ApiService
public interface ApiService {
@GET("ad/getAd")
Observable<HomeBean> getService(@Query("page")String page);
}
Contast
public class Contast {
//存放完整的接口
public static final String URL_STRING = "http://120.27.23.105/ad/getAd";
//存放根接口的接口
public static final String BEAN_STRING = "http://120.27.23.105/";
}
public interface IConter {
public interface IView{
void showData(HomeBean homeBean);
}
public interface IPresenter<IView>{
void attachView(IView iView);
void datachView(IView iView);
void showRequestData();
}
public interface IModel{
public interface OnCallBackListenter{
void OnCallBack(HomeBean homeBean);
}
void showResponseData(OnCallBackListenter onCallBackListenter);
}
}
Model
public class ModelImpl implements IConter.IModel {
@Override
public void showResponseData(final OnCallBackListenter onCallBackListenter) {
Observable<HomeBean> observable = RetrofitUtil.getInstance().getapiService(Contast.BEAN_STRING).getService("1");
observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<HomeBean>() {
@Override
public void accept(HomeBean homeBean) throws Exception {
onCallBackListenter.OnCallBack(homeBean);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
}
Presenter
public class PresenterImpl implements IConter.IPresenter<IConter.IView> {
IConter.IView iView;
private ModelImpl model;
private WeakReference<IConter.IView> iViewWeakReference;
private WeakReference<ModelImpl> modelWeakReference;
@Override
public void attachView(IConter.IView iView) {
this.iView = iView;
//创建M层对象
model = new ModelImpl();
//防止内存泄漏
iViewWeakReference = new WeakReference<>(iView);
modelWeakReference = new WeakReference<>(model);
}
@Override
public void datachView(IConter.IView iView) {
iViewWeakReference.clear();
modelWeakReference.clear();
}
@Override
public void showRequestData() {
model.showResponseData(new IConter.IModel.OnCallBackListenter() {
@Override
public void OnCallBack(HomeBean homeBean) {
iView.showData(homeBean);
}
});
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements IConter.IView {
@BindView(R.id.recyc_view)
RecyclerView recycView;
private IConter.IPresenter presenter;
private ArrayList<HomeBean.MiaoshaBean.ListBeanX> data = new ArrayList<>();
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//创建P层对象
context = MainActivity.this;
presenter = new PresenterImpl();
presenter.attachView(this);
presenter.showRequestData();
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.datachView(this);
}
@Override
public void showData(HomeBean homeBean) {
data.addAll(homeBean.getMiaosha().getList());
GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
recycView.setLayoutManager(gridLayoutManager);
SubAdapter subAdapter = new SubAdapter(context,data);
recycView.setAdapter(subAdapter);
}
}
SubAdapter
public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> {
Context context;
ArrayList<HomeBean.MiaoshaBean.ListBeanX> data;
public SubAdapter(Context context, ArrayList<HomeBean.MiaoshaBean.ListBeanX> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public SubViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
SubViewHolder subViewHolder = new SubViewHolder(view);
return subViewHolder;
}
@Override
public void onBindViewHolder(@NonNull SubViewHolder holder, int position) {
holder.text_view.setText(data.get(position).getTitle());
holder.text_view.setText(data.get(position).getTitle());
String images = data.get(position).getImages();
String substring = images.substring(0, images.indexOf(".jpg") + 4);
holder.show_image_view.setImageURI(Uri.parse(substring));
}
@Override
public int getItemCount() {
return data.size();
}
class SubViewHolder extends RecyclerView.ViewHolder{
private final SimpleDraweeView show_image_view;
private final TextView text_view;
public SubViewHolder(View itemView) {
super(itemView);
show_image_view = itemView.findViewById(R.id.show_image_view);
text_view = itemView.findViewById(R.id.text_view);
}
}
}