Fresco+retrofit+rxjava+mvp+电商进阶购物车(wxr)
生活随笔
收集整理的這篇文章主要介紹了
Fresco+retrofit+rxjava+mvp+电商进阶购物车(wxr)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
依賴
compile 'com.squareup.okhttp3:okhttp:3.10.0' compile 'com.android.support:recyclerview-v7:26.1.0' //黃油刀 compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' //圖片加載框架 compile 'com.facebook.fresco:fresco:0.12.0' //訪問網絡 implementation 'com.squareup.retrofit2:retrofit:2.4.0' compile 'com.squareup.retrofit2:converter-gson:2.4.0' //compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' //RxJava implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2:rxjava:2.1.12' compile 'com.github.userswlwork:pull-to-refresh:1.0.0' compile 'com.jcodecraeer:xrecyclerview:1.3.2' compile 'org.greenrobot:greendao:3.2.2' implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' compile 'com.github.bumptech.glide:glide:3.7.0'權限
<uses-permission android:name="android.permission.INTERNET"/> <application android:name=".application.MyApplication">布局<?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" android:orientation="vertical" tools:context="com.example.slx.songliangxing1511r20180423.MainActivity"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/rv"> </android.support.v7.widget.RecyclerView> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp"> <CheckBox android:id="@+id/cb" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="全選" /> <TextView android:id="@+id/price" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="總價:"/> <TextView android:id="@+id/tv_totalPrice" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="0"/> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="結算"/> </LinearLayout> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <CheckBox android:layout_gravity="center" android:id="@+id/lv_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.facebook.drawee.view.SimpleDraweeView android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:id="@+id/lv_img"/> <LinearLayout android:orientation="vertical" android:layout_gravity="center" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"> <TextView android:id="@+id/lv_title" android:text="標題" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/lv_price" android:text="價格:0.0" android:layout_width="120dp" android:layout_height="wrap_content" /> <Button android:id="@+id/lv_jian" android:layout_width="40dp" android:layout_height="40dp" android:text="-"/> <TextView android:id="@+id/lv_num" android:layout_width="40dp" android:layout_height="40dp" android:text="0"/> <Button android:id="@+id/lv_jia" android:layout_width="40dp" android:layout_height="40dp" android:text="+"/> </LinearLayout> </LinearLayout> <Button android:id="@+id/lv_remove" android:layout_gravity="center" android:layout_width="80dp" android:layout_height="wrap_content" android:text="刪除"/> </LinearLayout>
bean
public class MessageBean<T>{private String msg; private String code; private List<T> data; private String page; public class Goods {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; private Boolean flag;utils
package com.example.slx.songliangxing1511r20180423.utils; import com.example.slx.songliangxing1511r20180423.http.ApiService; import com.example.slx.songliangxing1511r20180423.http.ServiceUrl; import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by lenovo on 2018/4/23. */ public class HttpNetUtils {private static volatile HttpNetUtils instance; private final Retrofit retrofit; public static HttpNetUtils getInstance(){if(instance==null){synchronized (HttpNetUtils.class){if(null==instance){instance=new HttpNetUtils(); }}}return instance; }private HttpNetUtils(){HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BASIC); OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); retrofit = new Retrofit.Builder().baseUrl(ServiceUrl.BASE_URL).client(client).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build(); }public ApiService getService(){return retrofit.create(ApiService.class); } }http
package com.example.slx.songliangxing1511r20180423.http; /** * Created by lenovo on 2018/4/23. */ public class ServiceUrl {public static final String BASE_URL = "https://www.zhaoapi.cn/product/"; } package com.example.slx.songliangxing1511r20180423.http; import com.example.slx.songliangxing1511r20180423.bean.Goods; import com.example.slx.songliangxing1511r20180423.bean.MessageBean; import io.reactivex.Flowable; import retrofit2.http.GET; import retrofit2.http.Query; /** * Created by lenovo on 2018/4/23. */ public interface ApiService {@GET("getProducts")Flowable<MessageBean<Goods>> getGoodsData(@Query("pscid")String pscid); }inter
package com.example.slx.songliangxing1511r20180423.inter; import com.example.slx.songliangxing1511r20180423.bean.Goods; import com.example.slx.songliangxing1511r20180423.bean.MessageBean; /** * Created by lenovo on 2018/4/23. */ public interface IPresenter {void netWork(String pscid); void success(MessageBean<Goods> goodsMessageBean); } package com.example.slx.songliangxing1511r20180423.inter; import com.example.slx.songliangxing1511r20180423.bean.Goods; import com.example.slx.songliangxing1511r20180423.bean.MessageBean; /** * Created by lenovo on 2018/4/23. */ public interface IView {void toBackHome(MessageBean<Goods> goodsMessageBean); }view層
p層
package com.example.slx.songliangxing1511r20180423.presenter; import com.example.slx.songliangxing1511r20180423.bean.Goods; import com.example.slx.songliangxing1511r20180423.bean.MessageBean; import com.example.slx.songliangxing1511r20180423.inter.IPresenter; import com.example.slx.songliangxing1511r20180423.inter.IView; import com.example.slx.songliangxing1511r20180423.model.MyModel; /** * Created by lenovo on 2018/4/23. */ public class MyPresenter implements IPresenter{private IView iView; private final MyModel myModel; public MyPresenter(IView iView){this.iView=iView; myModel = new MyModel(); }@Override public void netWork(String pscid) {myModel.getData(pscid,this); }@Override public void success(MessageBean<Goods> goodsMessageBean) {iView.toBackHome(goodsMessageBean); } }m層
package com.example.slx.songliangxing1511r20180423.model; import com.example.slx.songliangxing1511r20180423.bean.Goods; import com.example.slx.songliangxing1511r20180423.bean.MessageBean; import com.example.slx.songliangxing1511r20180423.http.ApiService; import com.example.slx.songliangxing1511r20180423.inter.IPresenter; import com.example.slx.songliangxing1511r20180423.utils.HttpNetUtils; import io.reactivex.Flowable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import io.reactivex.subscribers.DisposableSubscriber; /** * Created by lenovo on 2018/4/23. */ public class MyModel {public void getData(String pscid, final IPresenter iPresenter) {HttpNetUtils instance = HttpNetUtils.getInstance(); ApiService service = instance.getService(); //得到被觀察者 Flowable<MessageBean<Goods>> goodsData = service.getGoodsData(pscid); goodsData.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new DisposableSubscriber<MessageBean<Goods>>() {@Override public void onNext(MessageBean<Goods> goodsMessageBean) {iPresenter.success(goodsMessageBean); }@Override public void onError(Throwable t) {}@Override public void onComplete() {}}); } }adapter
package com.example.slx.songliangxing1511r20180423.adapter; import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.example.slx.songliangxing1511r20180423.R; import com.example.slx.songliangxing1511r20180423.bean.Goods; import java.net.URL; import java.util.List; /** * Created by lenovo on 2018/4/23. */ public class MyAdapter extends RecyclerView.Adapter{//2.提供一個接口對象 private Change change; private List<Goods> list; private Context context; public MyAdapter(List<Goods> list, Context context) {this.list = list; this.context = context; }@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = View.inflate(parent.getContext(), R.layout.itemlayout, null); // LayoutInflater from = LayoutInflater.from(context); // View view = from.inflate(R.layout.itemlayout, parent, false); //創建ViewHolder 把view通過構造方法傳過去 MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; }@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {final MyViewHolder myViewHolder = (MyViewHolder) holder; //得到標題 myViewHolder.lv_title.setText(list.get(position).getTitle()); //得到圖片 String[] split = list.get(position).getImages().split("!"); Uri uri = Uri.parse(split[0]); myViewHolder.lv_img.setImageURI(uri); //得到價格 myViewHolder.lv_price.setText("價格"+list.get(position).getPrice()); //得到數量 myViewHolder.lv_num.setText(list.get(position).getSellerid()+""); //加 myViewHolder.lv_jia.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {int sellerid = list.get(position).getSellerid(); sellerid++; list.get(position).setSellerid(sellerid); notifyDataSetChanged(); change.jiaNum(); }}); //減 myViewHolder.lv_jian.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {int sellerid = list.get(position).getSellerid(); if (sellerid==1){myViewHolder.lv_jian.setFocusable(false); }else {sellerid--; }list.get(position).setSellerid(sellerid); notifyDataSetChanged(); change.jianNum(); }}); myViewHolder.lv_remove.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {list.remove(position); notifyDataSetChanged(); change.delete(); }}); myViewHolder.lv_checkbox.setChecked(list.get(position).getFlag()); myViewHolder.lv_checkbox.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {list.get(position).setFlag(!list.get(position).getFlag()); //添加一個觸發事件 change.changeMoney(); }}); }@Override public int getItemCount() {return list.size(); }//內部類創建V,在此方法中,尋找控件 class MyViewHolder extends RecyclerView.ViewHolder{private final TextView lv_title; private CheckBox lv_checkbox; private ImageView lv_img; private Button lv_jia; private Button lv_jian; private Button lv_remove; private TextView lv_num; private TextView lv_price; public MyViewHolder(View view) {super(view); lv_title = view.findViewById(R.id.lv_title); lv_checkbox = view.findViewById(R.id.lv_checkbox); lv_img = view.findViewById(R.id.lv_img); lv_jia = view.findViewById(R.id.lv_jia); lv_jian = view.findViewById(R.id.lv_jian); lv_remove = view.findViewById(R.id.lv_remove); lv_num = view.findViewById(R.id.lv_num); lv_price = view.findViewById(R.id.lv_price); }}//1.定義一個接口 public interface Change{void changeMoney(); void jiaNum(); void jianNum(); void delete(); }//3.提供一個為接口對象賦值的方法 public void getChange(Change change){this.change = change; } }application
package com.example.slx.songliangxing1511r20180423.application; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; /** * Created by lenovo on 2018/4/23. */ public class MyApplication extends Application{@Override public void onCreate() {super.onCreate(); Fresco.initialize(this); } }總結
以上是生活随笔為你收集整理的Fresco+retrofit+rxjava+mvp+电商进阶购物车(wxr)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 郑轻oj1065
- 下一篇: tp5和tp6的区别