首先导入权限<uses-permission android:name="android.permission.INTERNET" />
然后导入依赖
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.facebook.fresco:fresco:0.11.0' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.okhttp3:okhttp:3.1.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' //若和观察者结合的话,需加上如下依赖: compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1' compile 'com.youth.banner:banner:1.4.9' }
不要忘了设置name
评价的adapter——PJAdapterandroid:name=".utils.App"
首页的package com.example.week02.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.week02.R; import com.example.week02.bean.Pj_Bean; import java.util.List; public class PJAdapter extends BaseAdapter { Context context; List<Pj_Bean.DataBean> pjlist; public PJAdapter(Context context, List<Pj_Bean.DataBean> pjlist) { this.context = context; this.pjlist = pjlist; } @Override public int getCount() { return pjlist.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { PJHolder holder; if(convertView==null){ convertView=View.inflate(context, R.layout.pj_item,null); holder=new PJHolder(); holder.pj_tv=convertView.findViewById(R.id.pj_tv); holder.name_tv=convertView.findViewById(R.id.name_tv); convertView.setTag(holder); }else{ holder= (PJHolder) convertView.getTag(); } holder.name_tv.setText(pjlist.get(position).getName()); holder.pj_tv.setText(pjlist.get(position).getComment()); return convertView; } class PJHolder{ TextView name_tv; TextView pj_tv; } }
adapter——SYAdapterpackage com.example.week02.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.example.week02.R; import com.example.week02.bean.Sy_bean; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; public class SYAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{ Context context; List<Sy_bean.GoodsListBean> sylist; OnItemClickListener listener; public SYAdapter(Context context, List<Sy_bean.GoodsListBean> sylist) { this.context = context; this.sylist = sylist; } public interface OnItemClickListener{ public void OnItemClick(View view, int position, String name, String pic, String price); } public void setOnItemClick(OnItemClickListener listener){ this.listener=listener; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.sy_item,null); return new SYHolder(view); } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { ((SYHolder)holder).sdv.setImageURI(sylist.get(position).getImage_url()); ((SYHolder)holder).sy_tv.setText(sylist.get(position).getGoods_name()); ((SYHolder)holder).sy_price.setText("¥"+sylist.get(position).getGroup().getPrice()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(listener!=null){ listener.OnItemClick(view,position,((SYHolder)holder).sy_tv.getText().toString(),sylist.get(position).getImage_url(),((SYHolder)holder).sy_price.getText().toString()); } } }); } @Override public int getItemCount() { return sylist!=null?sylist.size():0; } class SYHolder extends RecyclerView.ViewHolder{ SimpleDraweeView sdv; TextView sy_tv; TextView sy_price; public SYHolder(View itemView) { super(itemView); sdv=itemView.findViewById(R.id.sdv); sy_tv=itemView.findViewById(R.id.sy_tv); sy_price=itemView.findViewById(R.id.sy_price); } } }
Bean新品列表: http://apiv3.yangkeduo.com/v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255 产品详情页面接口: http://apiv4.yangkeduo.com/v5/goods/202517471?pdduid=3470667255 店铺推荐接口 http://apiv4.yangkeduo.com/recommendation/mall?goods_id=202517471&pdduid=3470667255 产品评论接口 http://apiv4.yangkeduo.com/reviews/202517471?page=1&size=2&label=1&is_back=1&pdduid=3470667255
model——BNDataModelpackage com.example.week02.model; import com.example.week02.utils.RetrofitManager; import com.example.week02.utils.Url; import okhttp3.OkHttpClient; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class BNDataModel implements IBNDataModel{ @Override public void getBNData(String goods_id,Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client) .setCreate(Url.class).getPj(goods_id).observeOn(AndroidSchedulers .mainThread()) .subscribeOn(Schedulers.io()) .subscribe(observer); } }
model——IBNDataModelpackage com.example.week02.model; import rx.Observer; public interface IBNDataModel { public void getBNData(String goods_id, Observer observer); }
model——IPJDataModelpackage com.example.week02.model; import rx.Observer; public interface IPJDataModel { public void getPJData(String id, Observer observer); }
model——ISYDataModelpackage com.example.week02.model; import rx.Observer; public interface ISYDataModel { public void getSYData(Observer observer); }
model——PJDataModelpackage com.example.week02.model; import com.example.week02.utils.RetrofitManager; import com.example.week02.utils.Url; import okhttp3.OkHttpClient; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class PJDataModel implements IPJDataModel{ @Override public void getPJData(String id,Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://apiv4.yangkeduo.com/",client) .setCreate(Url.class) .getPjl(id) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(observer); } }
model——SYDataModelpackage com.example.week02.model; import com.example.week02.utils.RetrofitManager; import com.example.week02.utils.Url; import okhttp3.OkHttpClient; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class SYDataModel implements ISYDataModel{ @Override public void getSYData(Observer observer) { OkHttpClient client=new OkHttpClient.Builder().build(); RetrofitManager.getInstance("http://apiv3.yangkeduo.com/",client) .setCreate(Url.class) .getSy().observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(observer); } }
presenter——BNPresenterpackage com.example.week02.presenter; import android.util.Log; import com.example.week02.bean.Bn_Bean; import com.example.week02.model.BNDataModel; import com.example.week02.view.IBNDataView; import java.util.ArrayList; import java.util.List; import rx.Observer; public class BNPresenter { BNDataModel model; IBNDataView view; List<Bn_Bean.SkuBean> bnlist=new ArrayList<>(); public BNPresenter(IBNDataView view) { this.view = view; model=new BNDataModel(); } public void ppData(){ String goods_id=view.getBnId(); model.getBNData(goods_id,new Observer<Bn_Bean>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("111111banner","onError......"); } @Override public void onNext(Bn_Bean bn_bean) { bnlist.addAll(bn_bean.getSku()); view.bnShowData(bnlist); Log.i("111111banner","onNext"+bnlist); } }); } }
presenter——PJPresenterpackage com.example.week02.presenter; import android.util.Log; import com.example.week02.bean.Pj_Bean; import com.example.week02.model.PJDataModel; import com.example.week02.view.IPJDataView; import java.util.ArrayList; import java.util.List; import rx.Observer; public class PJPresenter { PJDataModel model; IPJDataView view; List<Pj_Bean.DataBean> pjlist=new ArrayList<>(); public PJPresenter(IPJDataView view) { this.view = view; model=new PJDataModel(); } public void ppData(){ String id=view.getId(); model.getPJData(id,new Observer<Pj_Bean>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("111111p","onError"); } @Override public void onNext(Pj_Bean pj_bean) { pjlist.addAll(pj_bean.getData()); view.pjShowData(pjlist); } }); } }
presenter——SYPresenterpackage com.example.week02.presenter; import android.util.Log; import com.example.week02.bean.Sy_bean; import com.example.week02.model.SYDataModel; import com.example.week02.view.ISYDataView; import java.util.ArrayList; import java.util.List; import rx.Observer; public class SYPresenter { SYDataModel model; ISYDataView view; List<Sy_bean.GoodsListBean> sylist=new ArrayList<>(); public SYPresenter(ISYDataView view) { this.view = view; model=new SYDataModel(); } public void spData(){ model.getSYData(new Observer<Sy_bean>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { Log.i("111111p","onError"); } @Override public void onNext(Sy_bean sy_bean) { sylist.addAll(sy_bean.getGoods_list()); view.showSYData(sylist); } }); } }
utils——Apppackage com.example.week02.utils; import android.app.Application; import com.facebook.drawee.backends.pipeline.Fresco; public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
utils——BnImageLoader
package com.example.week02.utils; 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 BnImageLoader extends ImageLoader{ @Override public void displayImage(Context context, Object path, ImageView imageView) { Uri uri = Uri.parse((String) path); imageView.setImageURI(uri); } public ImageView createImageView(Context context) { //使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context); return simpleDraweeView; } }
utils——RetrofitManager
package com.example.week02.utils; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitManager { private Retrofit mRetrofit; private String baseUrl; OkHttpClient client;//有关拦截器 private static RetrofitManager mRetrofitManager; private RetrofitManager(){} private RetrofitManager(String baseUrl, OkHttpClient client){ this.baseUrl=baseUrl; this.client=client;//有关拦截器 initRetrofit(); } public static synchronized RetrofitManager getInstance(String baseUrl,OkHttpClient client){//有关拦截器 if (mRetrofitManager == null){ mRetrofitManager = new RetrofitManager(baseUrl,client); } return mRetrofitManager; } private void initRetrofit() { mRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(client)//有关拦截器 .build(); } public <T> T setCreate(Class<T> reqServer){ return mRetrofit.create(reqServer); } }
utils——Url
package com.example.week02.utils; import com.example.week02.bean.Bn_Bean; import com.example.week02.bean.Pj_Bean; import com.example.week02.bean.Sy_bean; import retrofit2.http.GET; import retrofit2.http.Path; import rx.Observable; public interface Url { @GET("v5/goods/{goods_id}?pdduid=3470667255") Observable<Bn_Bean> getPj(@Path("goods_id") String goods_id); @GET("reviews/{id}?page=1&size=10&label=1&is_back=1&pdduid=3470667255") Observable<Pj_Bean> getPjl(@Path("id") String id); @GET("v5/newlist?page=1&size=20&ver=1512745500001&pdduid=3470667255") Observable<Sy_bean> getSy(); }
view——IBNDataViewpackage com.example.week02.view; import com.example.week02.bean.Bn_Bean; import java.util.List; public interface IBNDataView { public void bnShowData(List<Bn_Bean.SkuBean> bnlist); public String getBnId(); }
view——IPJDataView
package com.example.week02.view; import com.example.week02.bean.Pj_Bean; import java.util.List; public interface IPJDataView { public void pjShowData(List<Pj_Bean.DataBean> pjlist); public String getId(); }
view——ISYDataView
package com.example.week02.view; import com.example.week02.bean.Sy_bean; import java.util.List; public interface ISYDataView { public void showSYData(List<Sy_bean.GoodsListBean> sylist); }
MainActivitypackage com.example.week02; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import com.example.week02.adapter.SYAdapter; import com.example.week02.bean.Sy_bean; import com.example.week02.presenter.SYPresenter; import com.example.week02.view.ISYDataView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements ISYDataView { SYAdapter syAdapter; private RecyclerView mRv; List<Sy_bean.GoodsListBean> sylist=new ArrayList<>(); SYPresenter syPresenter; String id; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); syPresenter=new SYPresenter(this); showSYData(sylist); syPresenter.spData(); } @Override public void showSYData(final List<Sy_bean.GoodsListBean> sylist) { GridLayoutManager manager=new GridLayoutManager(this,2); mRv.setLayoutManager(manager); syAdapter=new SYAdapter(this,sylist); mRv.setAdapter(syAdapter); syAdapter.setOnItemClick(new SYAdapter.OnItemClickListener() { @Override public void OnItemClick(View view, int position, String name, String pic, String price) { id=sylist.get(position).getGoods_id()+""; Intent intent = new Intent(MainActivity.this,ShopActivity.class); intent.putExtra("id",id); intent.putExtra("name",name); intent.putExtra("pic",pic); intent.putExtra("price",price); startActivity(intent); } }); } private void initView() { mRv = (RecyclerView) findViewById(R.id.rv); } }
ShopActivitypackage com.example.week02; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.ListView; import android.widget.TextView; import com.example.week02.adapter.PJAdapter; import com.example.week02.bean.Bn_Bean; import com.example.week02.bean.Pj_Bean; import com.example.week02.presenter.BNPresenter; import com.example.week02.presenter.PJPresenter; import com.example.week02.utils.BnImageLoader; import com.example.week02.view.IBNDataView; import com.example.week02.view.IPJDataView; import com.youth.banner.Banner; import java.util.ArrayList; import java.util.List; public class ShopActivity extends AppCompatActivity implements IPJDataView,IBNDataView { private Banner mbanner; private TextView mPriceName; private ListView d_pj_lv; PJPresenter pjPresenter; String name; List<Pj_Bean.DataBean> pjlist=new ArrayList<>(); List<Bn_Bean.SkuBean> bnlist=new ArrayList<>(); String pic; String price; String id; PJAdapter pjAdapter; BNPresenter bnPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); initView(); Intent intent=getIntent(); name =intent.getStringExtra("name"); pic=intent.getStringExtra("pic"); price=intent.getStringExtra("price"); id=intent.getStringExtra("id"); initData(); pjPresenter=new PJPresenter(this); pjShowData(pjlist); pjPresenter.ppData(); bnPresenter=new BNPresenter(this); bnShowData(bnlist); bnPresenter.ppData(); } private void initData() { mPriceName.setText(price+"\r\n"+name); } private void initView() { mbanner = (Banner) findViewById(R.id.mbanner); mPriceName = (TextView) findViewById(R.id.price_name); d_pj_lv = (ListView) findViewById(R.id.d_pj_lv); } @Override public void pjShowData(List<Pj_Bean.DataBean> pjlist) { pjAdapter=new PJAdapter(this,pjlist); d_pj_lv.setAdapter(pjAdapter); } @Override public String getId() { return id; } @Override public void bnShowData(List<Bn_Bean.SkuBean> bnlist) { ArrayList<String> pic=new ArrayList<>(); for(int i=0;i<bnlist.size();i++){ pic.add(bnlist.get(i).getThumb_url()); Log.i("111111b",""+bnlist.get(i).getThumb_url()); } mbanner.setImageLoader(new BnImageLoader()); mbanner.setImages(pic); mbanner.start(); } @Override public String getBnId() { return id; } }
跳转到的页面
<activity android:name=".ShopActivity"></activity>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="新品" android:id="@+id/tv" android:textSize="25sp" android:gravity="center" android:textColor="@android:color/holo_red_dark" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_below="@+id/tv" android:layout_height="match_parent" ></android.support.v7.widget.RecyclerView> </RelativeLayout>
activity_details.xml
<?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"> <com.youth.banner.Banner android:id="@+id/mbanner" android:layout_width="match_parent" android:layout_height="230dp" /> <TextView android:id="@+id/price_name" android:layout_width="match_parent" android:textSize="15sp" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:background="@color/gainsboro" android:layout_height="5dp"> </LinearLayout> <LinearLayout android:id="@+id/d_ll" android:orientation="horizontal" android:layout_width="match_parent" android:gravity="center_vertical" android:layout_height="wrap_content"> <TextView android:text="商品评价" android:textSize="20sp" android:layout_marginLeft="20dp" android:textColor="@android:color/black" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <TextView android:id="@+id/more" android:layout_width="match_parent" android:layout_height="match_parent" android:text="查看全部>" android:gravity="center" android:layout_weight="1" android:layout_marginLeft="200dp" /> </LinearLayout> <ListView android:id="@+id/d_pj_lv" android:layout_marginLeft="20dp" android:layout_width="match_parent" android:layout_height="230dp"></ListView> <Button android:id="@+id/gwc" android:layout_width="match_parent" android:layout_height="60dp" android:text="加入购物车" android:textSize="20sp" android:background="@color/crimson" /> </LinearLayout>
pj_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:id="@+id/name_tv" android:layout_width="match_parent" android:textSize="20sp" android:text="111111111" android:textColor="@color/colorAccent" android:layout_height="wrap_content" /> <TextView android:id="@+id/pj_tv" android:layout_marginTop="10dp" android:layout_width="match_parent" android:textSize="15sp" android:text="111111111" android:layout_height="wrap_content" /> </LinearLayout>
sy_item.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_marginLeft="35dp" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/sdv" android:layout_marginLeft="30dp" android:layout_width="200dp" android:layout_height="200dp" /> <TextView android:id="@+id/sy_price" android:layout_marginLeft="30dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/sy_tv" android:layout_marginLeft="30dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>