所用的依赖
compile 'com.facebook.fresco:fresco:0.11.0' compile 'io.reactivex.rxjava2:rxjava:2.1.6' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'com.squareup.okhttp3:logging-interceptor:3.8.1' compile 'com.google.code.gson:gson:2.8.2' implementation 'com.nineoldandroids:library:2.4.0' implementation 'com.android.support:recyclerview-v7:26.1.0' compile 'com.android.support:cardview-v7:26.1.0'
RetrofitUtils封装的工具类
public class RetrofitUtils { private RetrofitUtils() { } private static ApiService apiService; public static ApiService getApiService() { if (apiService == null) { synchronized (RetrofitUtils.class) { if (apiService == null) { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { Log.i("aaa", "message====" + message); } }); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.i("zzz", "request====111111111111111111111111111111"); Log.i("zzz", "request====" + request.headers().toString()); okhttp3.Response proceed = chain.proceed(request); Log.i("zzz", "proceed====" + proceed.headers().toString()); return proceed; } }) .addInterceptor(httpLoggingInterceptor) .build(); Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(okHttpClient) .baseUrl(ApiService.BASE_URl) .build(); apiService = retrofit.create(ApiService.class); } } } return apiService; } }
ApiService
public interface ApiService { public final static String BASE_URl = "http://apiv4.yangkeduo.com/reviews/"; @GET("202517471?page=1&size=2&label=1&is_back=1&pdduid=3470667255") Observable<PlBean> getShouData(); }M层
public interface IPlmodel { void getData(Observer observer); }
public class PlModel implements IPlmodel { @Override public void getData(Observer observer) { RetrofitUtils.getApiService().getShouData() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } }V层
public interface IPLView { void setShouData(PlBean plBean); }P层
public interface IPresenter<V> { //mvp 绑定 void attech(V view); //解绑 void detech(); }
public class Plpresenter implements IPresenter<IPLView> { private PlModel mm; private SoftReference<IPLView> softReference; public Plpresenter(IPLView softReference) { attech(softReference); mm=new PlModel(); } @Override public void attech(IPLView view) { softReference=new SoftReference<IPLView>(view); } @Override public void detech() { softReference.clear(); } public void getDataShou(){ mm.getData(new Observer<PlBean>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(PlBean plBean) { softReference.get().setShouData(plBean); } @Override public void onError(Throwable e) { Log.i("gss","onError==="+e); } @Override public void onComplete() { } }); } }
适配器
public class MyplAdapter extends RecyclerView.Adapter<MyplAdapter.MyViewHolder> { Context context; PlBean plBean; private List<String> listhf; boolean index=true; public MyplAdapter(Context context, PlBean plBean) { this.context = context; this.plBean = plBean; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view=View.inflate(context,R.layout.rv_item,null); MyViewHolder holder=new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { holder.pl_item_name.setText(plBean.getData().get(position).getName()); holder.pl_item_xq.setText(plBean.getData().get(position).getComment()); holder.pl_item_xhpl.setText(plBean.getData().get(position).getName()+"小号:非常赞同!不能太赞同!"); DraweeController controller= Fresco.newDraweeControllerBuilder() .setUri(plBean.getData().get(position).getAvatar()) .setAutoPlayAnimations(true) .build(); holder.pl_item_img.setController(controller); holder.plitemkp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(index==true) { getaddlist(); Myhflvadapter adapter=new Myhflvadapter(context,listhf); holder.listView.setAdapter(adapter); Toast.makeText(context,"将展示多条回复~~~",Toast.LENGTH_SHORT).show(); index=false; } else if(index==false) { holder.listView.setVisibility(View.GONE); index=true; } } }); } @Override public int getItemCount() { return plBean.getData().size(); } class MyViewHolder extends RecyclerView.ViewHolder{ SimpleDraweeView pl_item_img; TextView pl_item_name,pl_item_xq,pl_item_xhpl,plitemkp; ListView listView; public MyViewHolder(View itemView) { super(itemView); pl_item_img=itemView.findViewById(R.id.pl_item_img); pl_item_name=itemView.findViewById(R.id.pl_item_name); pl_item_xq=itemView.findViewById(R.id.pl_item_xq); pl_item_xhpl=itemView.findViewById(R.id.pl_item_xhpl); plitemkp=itemView.findViewById(R.id.pl_item_plzk); listView=itemView.findViewById(R.id.pl_item_lv); } } } Activity
public class MainActivity extends AppCompatActivity implements IPLView { private Plpresenter plpresenter; private RecyclerView plrv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //p层的实例化 plpresenter=new Plpresenter(this); plpresenter.getDataShou(); plrv=findViewById(R.id.pl_rv); } //数据的操作 @Override public void setShouData(PlBean plBean) { LinearLayoutManager manager=new LinearLayoutManager(this); plrv.setLayoutManager(manager); MyplAdapter pladapter=new MyplAdapter(this,plBean); plrv.setAdapter(pladapter); } @Override protected void onDestroy() { super.onDestroy(); plpresenter.detech(); } }