日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fresco+retrofit+rxjava+mvp+电商进阶购物车(wxr)

發布時間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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層

package com.example.slx.songliangxing1511r20180423; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.TextView; import com.example.slx.songliangxing1511r20180423.adapter.MyAdapter; 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.presenter.MyPresenter; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity implements IView,MyAdapter.Change{@BindView(R.id.rv)RecyclerView rv; @BindView(R.id.cb)CheckBox cb; @BindView(R.id.price)TextView price; @BindView(R.id.tv_totalPrice)TextView tvTotalPrice; private List<Goods> list; private MyAdapter adapter; private CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); checkBox = findViewById(R.id.cb); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) {for (int i = 0; i <list.size() ; i++) {list.get(i).setFlag(b); }adapter.notifyDataSetChanged(); getMoney(); }}); //設置布局文件 rv.setLayoutManager(new LinearLayoutManager(this)); //創建p層對象 IPresenter myPresenter = new MyPresenter(this); myPresenter.netWork("2"); }@Override public void toBackHome(MessageBean<Goods> goodsMessageBean) {list = goodsMessageBean.getData(); //給定義的flag賦值,默認false for (int i = 0; i <list.size();i++) {list.get(i).setFlag(false); }//4.1實例化一個接口對象 adapter = new MyAdapter(list,MainActivity.this); rv.setAdapter(adapter); //4.2傳到對象內部 adapter.getChange(MainActivity.this); getMoney(); }public void changeMoney() {getMoney(); }public void jiaNum(){getMoney(); }public void jianNum(){getMoney(); }public void delete(){getMoney(); }public void getMoney() {double zon=0; for (int i = 0; i <list.size() ; i++) {Goods goods = list.get(i); boolean flag = goods.getFlag(); if (flag){double price = goods.getPrice(); int sellerid = goods.getSellerid(); zon+=price*sellerid; }}price.setText("總價:"+zon); }}

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。